2011-11-11 5 views
1

Pythonを介してMySQLスクリプトを実行しようとすると、エラーが表示され続けます。ここに私のMySQLがあります:MySQLのエラーを取得する

c.execute("""INSERT into DATA(checkup_date) 
VALUES(%s) WHERE machine_name = %s 
""", (date, machine)) 

私は間違っていますか?

ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE machine_name = 'TL-D04'\nVALUES('2011-11-11')' at line 2") 
+2

エラーを貼り付けてください。 – Alfabravo

+1

@JimGarrison: '%s'構文は、MySQLdbのパラメータ化されたSQLの仕組みです。特に、 '%s'の前後に引用符がないことに注意してください。 MySQLdbのドキュメントをGoogle検索して、あなたのコメントを捨ててください。 –

+0

_mysqlのソースコードを調べると、C APIはプリペアドステートメントを使用しないため、SQLインジェクションに対して脆弱であると考えられます。 Python MySQLDB APIを使用して回避することはできないようです。一言... –

答えて

3

INSERT INTO ... VALUES ... WHERE ...が有効なSQLではありませんあまりにも多くの引用符を持っているように見えます。 INSERTステートメントにWHERE句を追加することはできません。

新しい行を挿入するのではなく、現在DATAテーブルにある行のcheckup_date列を更新すると思われます。その場合は、代わりに

UPDATE DATA SET checkup_date = %s WHERE machine_name = %s 

とお試しください。

+0

これはうまくいくようですが、今はinventory.dataが存在しないことを伝えています。 ! –

+0

ProgrammingError:(1146、 "テーブル 'inventory.DATA'は存在しません) –

+0

データには上限が設定されていたためでした。 –

関連する問題