2012-10-14 48 views
1

我不知道是什么问题。 你能帮忙吗?关于python mysqldb TypeError

cur = conn.cursor() 
sql = "select count(*) from sbox_trig where date > CURDATE() and name ='bw109nocd%2Ezip'" 
cur.execute(sql) 

Exception Type: TypeError 
Exception Value: not enough arguments for format string 

回答

2

您可能实际上在MySQLdb模块中发现了一个错误。我怀疑它正在识别字符串文字中的百分号。尝试使用删除%(并且没有其他更改)的相同查询来验证是否是这种情况。如果是这样,你应该在模块的bug数据库中发布消息。另外,如果这是问题的根源,那么短期修复就是使用两个%符号(即bw109nocd %% 2Ezip),这样字符串解释器会将它看作文字百分号。

另请注意,如果您想在这里获得有用的信息,您应该包括Python,MySQL和MySQLdb的版本;包括您正在使用的操作系统也许会有所帮助,但这可能不是最重要的。对于数据库问题,至少查看表格模式也很有帮助。

我刚刚在我的一个数据库上测试了代码的变体,没有错误;我运行Ubuntu 12.04,使用Python 2.7.3以及MySQL和MySQLdb的股票版本。

2

我不使用MySQL作为Python,但是如果我不得不猜测,它会将%2E解释为printf样式的格式参数(请参阅this page)并期待参数。你应该尝试类似:

cur = conn.cursor() 
sql = "select count(*) from sbox_trig where date > CURDATE() and name = %s" 
cur.execute(sql, ("bw109nocd%2Ezip",)) 
0

,而不是直接在查询中指定的数据,它能够更好地第一家专卖店在它的一些局部变量,然后传递变量在查询中。

CUR = conn.cursor()

温度= “bw109nocd%2Ezip” 从sbox_trig

SQL =“SELECT COUNT(*)其中,日期> CURDATE()和名称=“%s的'“%温度

cur.execute(SQL)