我不知道是什么问题。 你能帮忙吗?
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
答案 0 :(得分:2)
加倍%
%符号:
sql = "select count(*) from sbox_trig where date > CURDATE() and name ='bw109nocd%%2Ezip'"
答案 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)