我试图让这个 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)
有什么想法我哪里出错了吗?
我试图让这个 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)
有什么想法我哪里出错了吗?
它应该是:
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)。
你的语法全错了:
cursor.execute ("""
UPDATE tblTableName
SET Year=%s, Month=%s, Day=%s, Hour=%s, Minute=%s
WHERE Server=%s
""", (Year, Month, Day, Hour, Minute, ServerID))
有关更多信息,请阅读文档。
正确做法如下:</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()
,否则将无法正常工作
出于某种原因,他们都没有为我工作。
我发现由于某种原因 python 不读取 %s。所以在你的 SQL 代码中使用 (?) 而不是 %S。
最后这对我有用。
cursor.execute ("update tablename set columnName = (?) where ID = (?) ",("test4","4"))
connect.commit()
@Esteban Küber 是绝对正确的。
对于像我这样的血腥初学者来说,也许还有一个额外的提示。如果您使用 %s 指定变量,则必须对每个输入值遵循此原则 ,这意味着对于 SET 变量以及 WHERE 变量。
否则,您将不得不面对终止消息,例如 “您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 '%s WHERE' 附近使用的正确语法