当我的python程序使用mysqll时,出现了一个非常奇怪的错误

当我的python程序使用mysqll时,出现了一个非常奇怪的错误,python,mysql,mysql-python,Python,Mysql,Mysql Python,这是密码 sql="SELECT node_id FROM %s WHERE domain='%s';"%(config.nodetable,url) r=getBySql(sql) 我的问题是试图将数据保存在mysql数据库中,所以这段代码应该重复执行几十万次。一开始一切都很顺利,直到几次解释器返回错误: File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 35, in defaulterrorhandler

这是密码

sql="SELECT node_id FROM %s WHERE domain='%s';"%(config.nodetable,url)
r=getBySql(sql) 
我的问题是试图将数据保存在mysql数据库中,所以这段代码应该重复执行几十万次。一开始一切都很顺利,直到几次解释器返回错误:

File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 35, 
in defaulterrorhandler
    raise errorclass, errorvalue
OperationalError: (1054, "Unknown column 'h' in 'where clause'")
但我发现要执行的sql字符串完全可以,如下所示:

SELECT node_id FROM testnodewww WHERE domain='http://service.qq.com';

我完全不知道。为什么一开始效果很好?为什么错误通知“未知列‘h’”??我的代码与h列完全无关…

MySQLdb将把参数转换为SQL文本,不要在SQL字符串中使用单引号,或在末尾使用分号,也不要使用字符串插值:

sql = "SELECT node_id FROM %s WHERE domain=%s" % (config.nodetable, url)
改为这样做:

cursor.execute("SELECT node_id FROM %s WHERE domain=%s", (config.nodetable, url))

您有一个SQL注入漏洞。不,执行函数将自动在config.nodetable中添加四元数,这将导致语法错误。然后更改您的执行函数,不要试图自己逃避,您会把它搞砸的。这几乎肯定是您的问题。谢谢,我可以问一下是什么导致了这个问题,以及为什么错误消息中包含一列“h”来自何处?如果没有看到所有代码,就无法确定,这可能是因为您试图手动创建SQL文本