Python MYSQL 更新ステートメント
-
19-09-2019 - |
質問
この 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 サーバーのバージョンに対応するマニュアルを確認してください。