Инструкция обновления Python MYSQL

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


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

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 абсолютно прав.

может быть, один дополнительный намек для кровавых новичков, таких как я. Если ты ... --3-->speciify переменные с %S, вы должны следовать этому принципу для каждого входного значения, что означает для множества переменных, а также для переменных WHERE.

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