【Python】cursorで条件文を書くときに引っかかったこと(プレースホルダー)

cursorを使ってDB操作をするのに以下のように記述した

sql_table  = 'test_master'
sql_value  = '(%s, %d, now(), now())'
input_value = [test_name, int(test_id)]

stmt = "INSERT INTO {table} ({column}) value    s {value} on duplicate key update updated_date=now()".format(table=sql_table, column=sql_column, value=sql_value)

connection = MySQLdb.connect(**db_connect_info)
connection.cursorclass = MySQLdb.cursors.DictCursor
cursor = connection.cursor()
#cursor.executemany(stmt, input_value)
cursor.execute(stmt, input_value)
print('cursor._executed:')
print(cursor._executed)
connection.commit()
connection.close()

一見これでも良さそうだがこうすると以下のようなエラーが表示される

cursor.execute(stmt, input_value)
File “/home/g-ad-10_app/anaconda3/lib/python3.5/site-packages/MySQLdb/cursors.py”, line 210, in execute
query = query % args
TypeError: %d format: a number is required, not str

idはintなので%dで指定しているのにintで指定してくれと怒られる

以下の記事を参照するとどうやら%dではなく%sを使う模様

 

参考になった記事

pymysqlのプレースホルダは数値と文字列を区別する

Python MySQL csvについての質問です

 

プレースホルダは%sで良くって、数値化文字列可適切に展開してくれるらしい

 

シェアする

  • このエントリーをはてなブックマークに追加

フォローする