Pythonからデータベースを扱う時の注意
Python Database API Specification v2.0というものがありますが、使うさきのDBのモジュールの仕様が、それぞれ微妙に違うので注意です。
特に、cursor.execute()の (query[,parameter]) の部分の違いにはまってたのでちょっとだけ書いてみますです。
全部は試してませんが、とりあえず、僕がわかっているものだけ。
sql = u"SELECT * FROM table1 WHERE id = :id" cur.execute(sql, { 'id': 1 })
上記はpgdb(Version 4.0)では使えませんでした。SQLite3では使えます('named')。
一方、
sql = u"SELECT * FROM table1 WHERE id = %(id)d" cur.execute(sql, { 'id': 1 })
は、SQLiteでは使えませんでした('pyformat')。
また、
sql = u"SELECT * FROM table1 WHERE id = %d" cur.execute(sql, (4))
はSQLite3では使えません。SQLite3では、
sql = u"SELECT * FROM table1 WHERE id = ?" cur.execute(sql, (4))
で、発行できます。
あわてて書いているので間違っている可能性もありますし、MySQL等ほかのRDBMSでは試していないので、なんとも言えませんが、こんなところです。