web-dev-qa-db-ja.com

Python MYSQL update statement

私はこれを取得しようとしていますPython MYSQL update statement correct(With Variables):

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

私が間違っているつもりはありますか?

39
Adam Chetnik

それ あるべき

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

基本的な文字列操作でalsoすることもできますが、

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インジェクションのためにあなたを開いたままにするのでお勧めできません正しい方法でそれを行うのはとても簡単です(そして類似しています)tm。正しくやってください。

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

75
Esteban Küber

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

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

詳細については、 ドキュメントを読む

50

正しい方法は次のとおりです。

_import MySQLdb

if __== '__main__':
    connect = MySQLdb.connect(Host="localhost", port=3306,
                              user="xxx", passwd="xxx", db='xxx', charset='utf8')

    cursor = connect.cursor()

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

    connect.commit()
    connect.close()
_

追伸connect.commit()を忘れないでください。

17
Little Roys

なんらかの理由でどちらも機能しませんでした。

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

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

   cursor.execute ("update tablename set columnName = (?) where ID = (?) ",("test4","4"))
   connect.commit()
3
SVK

@EstebanKüberは絶対に正しい。

たぶん私のような血まみれの初心者のための1つの追加のヒント。 %sで変数を指定するの場合、この原則に従う必要がありますすべての入力値の場合、つまり、SET変数とWHERE変数の両方を意味します。

そうしないと、'SQL構文にエラーがあります。'%s WHERE 'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください

0
M. Straube