PyCon JP 2014 LT

PyCon JP 2014 LT

Writing Python Database Adapter

E69a5f2a5859ce5f897c2e9dc5158ec5?s=128

Hajime Nakagami

September 13, 2014
Tweet

Transcript

  1. 2.

    Profile(おまえ誰よ) • Hajime Nakagami(中神 肇) • Python programmer at least recent

    5 years. • Work at BeProud inc. http://jobs.beproud.jp/ • GitHub: https://github.com/nakagami • Family: a wife, a son, a daughter, 3 dogs, 2 cats • Hobby: Writting Python Database Adapter
  2. 3.

    What's Python Database Adapter • Generally called “Database Driver” •

    PEP-249 Python Database API Specification v2.0 http://legacy.python.org/dev/peps/pep-0249/ • Python から RDBMS に共通のインターフェース でアクセスできるように仕様を定義したもの • 緩い仕様(仕様というより指針?) • 1つの RDBMS に多くの実装があるのが普通 • 結局どれを使えば良いかわからない問題 • 書くハードルは低い
  3. 5.

    pyfirebirdsql • Since 2010-09-26 • Pure Python • Firebird RDBMS

    http://www.firebirdsql.org/ • https://github.com/nakagami/pyfirebirdsql • https://pypi.python.org/pypi/firebirdsql • Firebird の DA の中ではメジャー(数が少ない) • Firebird は Delphi / .Net Frameworkでの開発が多 いので、 Python がマイナー(という印象) • そもそも Firebird という RDBMS がマイナー
  4. 6.

    CyMySQL • Since 2013-01-01 • Forked from PyMySQL • Author:

    Yutaka Matsubara • Pure Python or accelerated with Cython • https://pypi.python.org/pypi/cymysql • https://github.com/nakagami/CyMySQL • PyMySQL のメンテンンスが滞っている時期に fork し魔改造。その後 PyMySQL はメンテナー が替わってメンテナンスが活発になってきてい る(CyMySQL いらない子やったんや!)
  5. 8.
  6. 13.

    minipg • Since 2014-08-17 • Pure Python • Mini PostgreSQL

    driver (only 720 lines) • https://github.com/nakagami/minipg • https://pypi.python.org/pypi/minipg • It can install as a package or as a module • Psycopg2 に比べてできないことたくさんあり • 不具合報告、 Pull request お待ちしております • ほとんどの場合に十分な機能
  7. 14.

    minipg(2) • Unix ドメインソケットで接続できない • クライアント認証に trust と md5 しか使えない

    • スレッド間でのコネクション共有できない • 配列型が python の配列として取得できない • Prepared statement できない • Select For Update できない • その他高度なオプション使えない ・・・でもいいんです
  8. 16.

    (参考)Other Database Adapters MySQL • https://pypi.python.org/pypi/MySQL-python (python 2.x) • https://pypi.python.org/pypi/PyMySQL

    (pure python) • https://pypi.python.org/pypi/mysql-connector-python • https://pypi.python.org/pypi/mysqlclient PostgreSQL • http://pypi.python.org/pypi/psycopg2 • https://pypi.python.org/pypi/pg8000 (pure python) Firebird • http://pypi.python.org/pypi/fdb