【发布时间】:2013-05-15 16:53:44
【问题描述】:
我正在尝试使用 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,它似乎很好。
这与查询中的单引号日期有关吗?还是别的什么?
【问题讨论】:
-
把
BETWEEN '%s' AND '%s'改成BETWEEN %s AND %s还能用吗?如果不是,client_id、start_date、end_date的类型是什么? -
不行,已经试过了。客户 ID 是一个字符串,另外两个是日期。
-
我想也许一个更好的问题是,我应该如何使用 MySQLdb 运行删除查询,因为我需要使用日期作为标准?这是最好的方法还是有其他方法?
-
我只是尝试了一个类似的例子,我无法重现错误。您说您尝试将 SQL 作为字符串传递,我假设您的意思是您在执行查询之前插入了值。你能包括你这样做时得到的确切的 SQL 吗? TBH,不过,我看不出该代码有什么问题,所以你确定这是产生错误的查询吗?可能有助于包含完整的堆栈回溯。
-
@Aya 感谢您的持续帮助,这是执行前的 SQL:
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 = 0009 AND DATE(er.cr_date) BETWEEN '2013-05-01' AND '2013-05-15'
标签: python mysql mysql-python