46

このPython MYSQL更新ステートメントを正しく取得しようとしています(変数あり):

cursor.execute ("UPDATE tblTableName SET Year=%s" % Year ", Month=%s" % Month ", Day=%s" % Day ", Hour=%s" % Hour ", Minute=%s" Minute "WHERE Server=%s " % ServerID)   

私が間違っているアイデアはありますか?

4

5 に答える 5

81

それはあるべきです

cursor.execute ("""
   UPDATE tblTableName
   SET Year=%s, Month=%s, Day=%s, Hour=%s, Minute=%s
   WHERE Server=%s
""", (Year, Month, Day, Hour, Minute, ServerID))

基本的な文字列操作でそれを行うこともできます、

cursor.execute ("UPDATE tblTableName SET Year=%s, Month=%s, Day=%s, Hour=%s, Minute=%s WHERE Server='%s' " % (Year, Month, Day, Hour, Minute, ServerID))

ただし、この方法ではSQLインジェクションを利用できるため、お勧めできません正しい方法でそれを行うのはとても簡単です(そして同様です。正しくやってください。

注意する必要がある唯一のことは、一部のデータベースバックエンドが文字列置換の同じ規則に従わないことです(SQLiteが思い浮かびます)。

于 2009-08-20T16:33:46.853 に答える
53

構文がすべて間違っています:

cursor.execute ("""
   UPDATE tblTableName
   SET Year=%s, Month=%s, Day=%s, Hour=%s, Minute=%s
   WHERE Server=%s
""", (Year, Month, Day, Hour, Minute, ServerID))

詳細については、ドキュメントをお読みください

于 2009-08-20T16:35:46.023 に答える
3

どちらも何らかの理由で私のために働いていませんでした。

何らかの理由で python が %s を読み取らないことがわかりました。したがって、SQL コードでは %S の代わりに (?) を使用してください。

そして最後に、これは私のために働きました。

   cursor.execute ("update tablename set columnName = (?) where ID = (?) ",("test4","4"))
   connect.commit()
于 2016-08-17T18:40:34.603 に答える