Python的MySQLdb的错误 - 是什么原因造成这(Python MySQLdb error

2019-09-20 03:07发布

我很奇怪,为什么我收到此错误:

cmd = "INSERT INTO resulttest (category, value, timestamp) VALUES (" + key + ", " + str(value) + ", " + str(timestamp) + ")"
c.execute(cmd)
db.commit()

    INSERT INTO resulttest (category, value, timestamp) VALUES (composed, 2, 1343186948.8)

Traceback (most recent call last):
  File "C:/Behavioral Technology/Google Drive/twitterthingv5test.py", line 94, in <module>
    moodParser()
  File "C:/Behavioral Technology/Google Drive/twitterthingv5test.py", line 92, in moodParser
    query()
  File "C:/Behavioral Technology/Google Drive/twitterthingv5test.py", line 37, in query
    main(columns)
  File "C:/Behavioral Technology/Google Drive/twitterthingv5test.py", line 81, in main
    c.execute(cmd)
  File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 174, in execute
    self.errorhandler(self, exc, value)
  File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue

我相信这是与我如何通过我的值的SQL命令。

Answer 1:

你的代码来创建查询不是试图引用字符串值:

cmd = "INSERT INTO resulttest (category, value, timestamp) VALUES (" + key + ", " + str(value) + ", " + str(timestamp) + ")"

看看你打印的SQL语句:

INSERT INTO resulttest (category, value, timestamp) VALUES (composed, 2, 1343186948.8)

不应该“类别”被引用?

你不应该在第一时间进行创作与字符串操作的SQL语句。 这是注入漏洞的SQL如何发生的。 相反,你应该使用占位符,让MySQL库处理它们:

c.execute(
    "INSERT INTO resulttest (category, value, timestamp) VALUES (?, ?, ?)", 
    (key, value, timestamp)
)


Answer 2:

如果斯内德尔德的建议行不通,这里是一个另类:

sql = "INSERT into resulttest (category, value, timestamp) VALUES (%s, %s, %s)"
c.execute(sql % (key, value, timestamp))

我遇到因没有执行我的SQL命令中的问题,并按照这种语法的使工作。

虽然你一定要小心,因为用%来代替,开辟了SQL注入的可能性,但这只是为我工作的语法。 可能是一个Python的MySQL版本和兼容性问题。

一个更好的想法是将安装兼容版本,并按照正确的语法。



文章来源: Python MySQLdb error - what is causing this