読者です 読者をやめる 読者になる 読者になる

MySQLdbのexecuteメソッドで文字列を代入する時の注意点

MySQLdbの軽い使い方は→MySQLdbの使い方 - SELECT * FROM life;

MySQLdbのcursorクラスのexecuteメソッドを使って

import MySQLdb
con = MySQLdb.connect(db="hoge")
cur = con.cursor()
cur.execute("SELECT * FROM hogehoge")

とすることでsqlを実行できる。また、sqlの値を動的に変化させることもできる

id = 10
count = 4
# SELECT * FROM hogehoge WHERE id = 10 AND count = 4 が実行される
cur.execute("SELECT * FROM hogehoge WHERE id = %s AND count = %s", (id, count))

だが、文字列を代入してsqlを作ろうと思った場合注意が必要で

name = 'piyopiyo'
# これだとエラーになる
# cur.execute("SELECT * FROM hogehoge WHERE name = '%s'", (name,))
sql = "SELECT * FROM hogehoge WHERE name = '%s'" % (name,)
cur.execute(sql)

の様に、先にsql文を生成しておいてから実行するようする。
何がいけないのか分らないが、とにかく上記の方法にしたら通るのでとりあえずよしとしておこう。