Заявление об обновлении Python MYSQL - PullRequest
37 голосов
/ 20 августа 2009

Я пытаюсь получить корректный оператор обновления 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)   

Есть идеи, где я иду не так?

Ответы [ 5 ]

72 голосов
/ 20 августа 2009

Это должно быть :

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).

49 голосов
/ 20 августа 2009

У вас неверный синтаксис:

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

Для получения дополнительной информации прочитайте документацию .

16 голосов
/ 06 августа 2016

Вот правильный путь:

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(), иначе он не будет работать

3 голосов
/ 17 августа 2016

Никто из них почему-то не работал.

Я понял, что по какой-то причине python не читает% s. Так что используйте (?) Вместо% S в вашем коде SQL.

И, наконец, это сработало для меня.

   cursor.execute ("update tablename set columnName = (?) where ID = (?) ",("test4","4"))
   connect.commit()
0 голосов
/ 20 августа 2018

@ Эстебан Кюбер абсолютно прав.

Может быть, еще один совет для таких чертовых начинающих, как я Если вы указываете переменные с% s , вы должны следовать этому принципу для КАЖДОГО входного значения , что означает для переменных SET, а также для переменных WHERE.

В противном случае вам придется столкнуться с сообщением о прекращении, например, 'У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с "% s WHERE"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...