DBAPI勉強中
PostgreSQL + psycopg2でデータベースにアクセスちゅう。
PEP 249 -- Python Database API Specification v2.0 | Python.org
いわゆるプリペアードステートメントみたいな、SQLとパラメータを別々に渡すために、DBAPIでは何種類かのフォーマットが選べるみたいです。で、デフォルトは'pyformat'になってるみたいです。
>>> import psycopg2 >>> psycopg2.paramstyle 'pyformat'
pyformatの場合は、execute()の時に値を辞書で渡します。
>>> con = psycopg2.connect("dbname=mail") >>> cur = con.cursor() >>> cur.execute("select %(msg)s", dict(msg="Hello"))
とすると、PostgreSQL側では、
LOG: statement: BEGIN; SET TRANSACTION ISOLATION LEVEL READ COMMITTED LOG: statement: select 'Hello'
ってな感じでログが残ります。
- トランザクションは自動的に開始されるみたいです
- 文字列のクォートも自動的にやってくれてますね
ためしに意地悪してみると、
>>> cur.execute("select %(msg)s", dict(msg="it's a beautiful day")) >>> cur.execute("select %(msg)s", dict(msg=None))
LOG: statement: select 'it''s a beautiful day' LOG: statement: select NULL
ちゃんとエスケープしてますね。あとNoneはNULLになるようです。