我正在尝试使用 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:在字符串格式化期间并非所有参数都被转换
我尝试将 SQL 作为字符串传递给游标(我知道这容易受到 SQL 注入(inject),只是测试),结果是相同的。我检查了 SQL,看起来没问题。
这与查询中的单引号日期有关吗?还是别的什么?
最佳答案
回溯中有一条线索......
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()
返回一个包含三个元素的元组,但您仅在字符串 "Error %s deleting from DB"
中指定了一个占位符.
值得注意的是(sys.exc_info())
不是一个只有一个元素的元组,但被解释为 sys.exc_info()
。如果你想让它成为一个单元素元组,你需要一个尾随逗号,即 (sys.exc_info(),)
.
但是,如果该行是像这样的 block 的一部分......
try:
# do query
except:
print "Error %s deleting from DB" % (sys.exc_info())
...您最好重新引发原始异常,否则很难找出实际问题所在。我建议将其更改为...
try:
# do query
except:
print "Error deleting from DB"
raise
...至少在调试时是这样。
关于python - MySQLdb 删除查询 - TypeError : not all arguments converted during string formatting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16570847/