次のようなステートメントを実行しようとすると、次のようになります。
cursor.executemany("""INSERT INTO `test` (`id`,`data`,`time_added`)
VALUES (%s, %s, NOW())""", [(i.id, i.data) for i in items])
MySQLdbは、挿入する行のリストを展開すると、その括弧が値ブロックの終わりと見なされるため、NOW()の)を詰まらせているようです。つまり、クエリは次のようになります。
('1', 'a', NOW(), ('2','b', NOW(), ('3','c',NOW())
そしてMYSQLは構文エラーを報告します。代わりに、次のようになります。
('1', 'a', NOW()), ('2','b', NOW()), ('3','c',NOW())
NOW()を回避する方法があるはずですが、その方法がわかりません。タプルに「NOW()」を追加しても機能しません。これは、NOW()が引用符で囲まれ、DBによって関数呼び出しではなく文字列として解釈されるためです。
現在のタイムスタンプをデフォルト値として使用してこれを回避することはオプションではありません。これは例です。今だけでなく、さまざまなdb関数を使用してこの種のことを行う必要があります。
ありがとう!