Вопрос

Я пытаюсь исправить это утверждение обновления 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'

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top