0

我正在尝试使用 MySQLdb 运行删除查询并传递 3 个变量。查询运行如下:

self.cursor.execute("""DELETE er.* FROM extension_recording er, 
  extension e, client c 
 WHERE er.extension_id = e.id AND e.client_id = c.id 
  AND c.parent_client_id = %s 
  AND DATE(er.cr_date) BETWEEN '%s' AND '%s'""" , 
(client_id, start_date, end_date))

请原谅缩进,没有它似乎无法使其清晰。

发生的事情是这样的:TypeError: not all arguments converted during string formatting

我尝试将 SQL 作为字符串传递给游标(我知道这很容易受到 SQL 注入的影响,只是在测试),结果是一样的。我已经检查了 SQL,它似乎很好。

这与查询中的单引号日期有关吗?或者是其他东西?

4

1 回答 1

1

回溯中有线索...

Traceback (most recent call last):
  File "/usr/local/bin/recording_archive_newer.py", line 194, in <module>
    print "Error %s deleting from DB" % (sys.exc_info())
TypeError: not all arguments converted during string formatting

问题不在于查询,而在于打印错误消息。

sys.exc_info()返回一个包含三个元素的元组,但您只在 string 中指定了一个占位符"Error %s deleting from DB"

值得注意的是,(sys.exc_info())它不是一个元素的元组,而是被解释为sys.exc_info(). 如果你想让它成为一个单元素元组,你需要一个尾随逗号,即(sys.exc_info(),).

但是,如果该行是块的一部分,例如...

try:
    # do query
except:
    print "Error %s deleting from DB" % (sys.exc_info())

...您最好重新提出原始异常,否则将很难找出实际问题所在。我建议将其更改为类似...

try:
    # do query
except:
    print "Error deleting from DB"
    raise

...至少在您调试时。

于 2013-05-16T16:59:16.957 回答