关于python mysqldb TypeE

2021-01-21 21:41:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道是什么问题。 你能帮忙吗?在

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
3条回答
网友
1楼 ·

%百分比符号加倍:

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

%2E部分被解释为string formatter for a floating point number,否则。在

网友
2楼 ·

实际上,您可能在MySQLdb模块中发现了一个bug。我怀疑它在识别字符串文字中的百分号。尝试使用删除的%进行相同的查询(没有其他任何更改),以验证是否是这种情况。如果是这样的话,您可能应该在该模块的bug数据库中发布一条消息。在

另外,如果这是问题的根源,那么短期的解决方法是使用两个%符号(即bw109nocd%%2Ezip),这样字符串解释器就会将其视为文字百分号。在

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

我刚刚在我的一个数据库上测试了您的代码变体,没有出错;我运行的是Ubuntu12.04、Python2.7.3以及MySQL和MySQLdb的普通版本。在

网友
3楼 ·

我没有将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",))

相关问题