Python的MYSQL更新语句(Python MYSQL update statement)

2019-06-18 15:32发布

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

任何想法,我要去哪里错了吗?

Answer 1:

它应该是 :

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的想到)。



Answer 2:

你有语法都错了:

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

如需更多信息, 阅读文档 。



Answer 3:

这是正确的做法:

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()否则将无法正常工作



Answer 4:

无论他们的工作对我的某些原因。

我想通了,由于某些原因,Python不读%S。 因此,使用(?)代替%S在你的SQL代码。

最后这为我工作。

   cursor.execute ("update tablename set columnName = (?) where ID = (?) ",("test4","4"))
   connect.commit()


Answer 5:

@EstebanKüber是绝对正确的。

也许对于初学者血腥像我这样的一个额外的暗示。 如果您speciify与%s的变量 ,你必须遵循这一原则对于每个输入值 ,这意味着对于该SET变量以及为在WHERE变量。

否则,你将有一个像“你在你的SQL语法错误要面对终止消息; 检查对应于你的MySQL服务器版本使用附近的“%s其中”正确的语法手册



文章来源: Python MYSQL update statement