Оператор обновления 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)
Есть какие-нибудь идеи, в чем я ошибаюсь?
Решение
IT должно быть:
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).
Другие советы
У вас совершенно неправильный синтаксис:
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()
@Эстебан Кюбер абсолютно прав.
Может быть, один дополнительный совет для чертовых новичков вроде меня.Если вы укажите переменные с помощью %s, вы должны следовать этому принципу для КАЖДОГО входного значения, что означает как для SET-переменных, так и для WHERE-переменных.
В противном случае вам придется столкнуться с сообщением о завершении, таким как 'У вас ошибка в вашем синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с '%s WHERE'