关于python mysqldb TypeError

时间:2012-10-14 13:15:14

标签: python format arguments mysql-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

4 个答案:

答案 0 :(得分:2)

加倍%%符号:

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

%2E部分被解释为string formatter for a floating point number

答案 1 :(得分:2)

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

此外,如果这是问题的根源,短期修复是使用两个%符号(即bw109nocd %% 2Ezip),以便字符串解释器将其视为文字百分号。

另请注意,如果您需要有用的信息,则应包括Python,MySQL和MySQLdb的版本;包含您正在使用的操作系统可能会有所帮助,尽管这可能不是最重要的事情。对于数据库问题,至少查看表模式也很有帮助。

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

答案 2 :(得分: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",))

答案 3 :(得分:0)

不是直接在查询中指定数据,而是首先将其存储在某个局部变量中,然后在查询中传递变量。

  

cur = conn.cursor()

     

temp =“bw109nocd%2Ezip”

     

sql =“从sbox_trig中选择计数(*),其中日期> CURDATE()和name ='%s'”%temp

     

cur.execute(SQL)