1

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

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

4 回答 4

2

双倍%百分比符号:

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

否则,该%2E部分将被解释为浮点数的字符串格式化程序。

于 2012-10-14T13:25:00.060 回答
2

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

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

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

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

于 2012-10-14T13:27:55.427 回答
2

我不将 MySQL 用于 Python,但如果我不得不猜测,它会将 %2E 解释为 printf 样式的格式参数(请参阅此页面)并期待一个参数。您可能应该尝试以下方法:

cur = conn.cursor()
sql = "select count(*) from sbox_trig where date > CURDATE() and name = %s"
cur.execute(sql, ("bw109nocd%2Ezip",))
于 2012-10-14T13:36:06.263 回答
0

Instead of specifying data directly in query, its better to first store it in some local variable and then pass the variable in the query.

cur = conn.cursor()

temp = "bw109nocd%2Ezip"

sql = "select count(*) from sbox_trig where date > CURDATE() and name = '%s' " % temp

cur.execute(sql)

于 2012-10-30T13:56:46.890 回答