【Python】cursorで生SQL(date_fomat())を発行するときにつまったこと

以下のようなSQLを実行しようとしたらエラーがでた

list=(‘1′,’2’)

sql_where = sql_where + ” and DATE_FORMAT(date, ‘%Y%m%d’) = DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY), ‘%Y%m%d’)

sql = sql + sql_where

cursor.execute(sql, list)

cursor.fetchall()

not enough arguments for format string python date_format

date_fomat()の%Y%m%d部分がプレースホルダーの引数として認識されてしまってるっぽい

こちらの記事参考にして以下のように書き直すと動いた

sql_where = sql_where + ” and DATE_FORMAT(date, ‘%%Y%%m%%d’) = DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY), ‘%%Y%%m%%d’)

→これではうまく条件がせっていされませんでした

以下のように修正

sql_where = sql_where + ” and DATE_FORMAT(date, ‘\%Y\%m\%d’) = DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY), ‘\%Y\%m\%d’)

%をエスケープした

シェアする

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

フォローする