46

我试图让这个 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)   

有什么想法我哪里出错了吗?

4

5 回答 5

81

应该是

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 Injection 敞开大门。因为以正确的方式进行操作非常容易(并且类似) tm。正确地做。

您唯一应该注意的是,某些数据库后端不遵循相同的字符串替换约定(想到 SQLite)。

于 2009-08-20T16:33:46.853 回答
53

你的语法全错了:

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

有关更多信息,请阅读文档

于 2009-08-20T16:35:46.023 回答
21

正确做法如下:</p>

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

PS不要忘记connect.commit(),否则将无法正常工作

于 2016-08-06T08:20:53.010 回答
3

出于某种原因,他们都没有为我工作。

我发现由于某种原因 python 不读取 %s。所以在你的 SQL 代码中使用 (?) 而不是 %S。

最后这对我有用。

   cursor.execute ("update tablename set columnName = (?) where ID = (?) ",("test4","4"))
   connect.commit()
于 2016-08-17T18:40:34.603 回答
0

@Esteban Küber 是绝对正确的。

对于像我这样的血腥初学者来说,也许还有一个额外的提示。如果您使用 %s 指定变量,则必须对每个输入值遵循此原则 ,这意味着对于 SET 变量以及 WHERE 变量。

否则,您将不得不面对终止消息,例如 “您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 '%s WHERE' 附近使用的正确语法

于 2018-08-20T12:19:44.693 回答