我试图让这个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注入 。 由于它是如此简单(以及类似)做正确的方式 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()
PS不要忘记connect.commit()
否则将无法正常工作
无论他们的工作对我的某些原因。
我想通了,由于某些原因,Python不读%S。 因此,使用(?)代替%S在你的SQL代码。
最后这为我工作。
cursor.execute ("update tablename set columnName = (?) where ID = (?) ",("test4","4"))
connect.commit()
@EstebanKüber是绝对正确的。
也许对于初学者血腥像我这样的一个额外的暗示。 如果您speciify与%s的变量 ,你必须遵循这一原则对于每个输入值 ,这意味着对于该SET变量以及为在WHERE变量。
否则,你将有一个像“你在你的SQL语法错误要面对终止消息; 检查对应于你的MySQL服务器版本使用附近的“%s其中”正确的语法手册