質問

この 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)   

どこが間違っているのか何か考えはありますか?

役に立ちましたか?

解決

それ あるべきです:

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 インジェクションの可能性が残るため、この方法はお勧めしません。. 。非常に簡単に(そして同様に)行うことができるので、 正しい方法TM. 。正しく実行してください。

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

他のヒント

あなたは構文にすべて間違って持ってます:

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

の詳細については、ドキュメントを読みます。

ここでは、正しい方法です。

import MySQLdb

if __name__ == '__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()

P.S。 connect.commit()を忘れてはいけない、またはそれが動作しません。

それらのどちらもが、何らかの理由で私のために働いています。

私はいくつかの理由のためのpythonは%sの読み取りませんので、それを考え出しました。だから、使い(?)の代わりに、あなたの%S SQLコードを。

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

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

@Esteban Küber はまったく正しいです。

おそらく私のような初心者向けに追加のヒントが 1 つあるでしょう。もし、あんたが %s で変数を指定します, 、この原則に従わなければなりませんすべての入力値に対して, これは、SET 変数と WHERE 変数を意味します。

そうしないと、次のような終了メッセージが表示されます。「SQL 構文にエラーがあります。「%s WHERE」付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top