python - MySQLdb 删除查询 - TypeError : not all arguments converted during string formatting

标签 python mysql mysql-python

我正在尝试使用 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/

相关文章:

python - Mysql、python、SQL不执行

python - 评分系统 - 输入特征

python - 如何使用 Python 下载 YouTube 音频?

Python:unicode .encode,可以对不可编码的字符调用函数吗?

mysql - 将 EXECUTE 的查询结果存储在 View 中 - MySQL

Mysql外键关系选择语句

PHP/IOS : what is best way to encode json for web service?

python - 如何将 None 值 append 到 Python 中的列表?

python cursor.execute 返回空

python - 在 Python 上使用 MySQLdb 提交多个插入