【问题标题】:Escaping % in MySQLdb在 MySQLdb 中转义 %
【发布时间】:2013-03-27 21:39:45
【问题描述】:

我在冗长复杂的 SELECT 语句中发现了一个隐蔽的逗号

在 python 脚本中,我有这样一行

con.execute("SELECT STR_TO_DATE(date_recieved, '%%m/%%d/%%Y') from raw_table")

但是,这让 MySQLdb 不高兴,并抱怨:

File "/lib/python2.6/site-packages/MySQL_python-1.2.4-py2.6-linux-x86_64.egg/MySQLdb/cursors.py", 
line 183, in execute
    query = query % db.literal(args)
TypeError: not all arguments converted during string formatting

我不想要任何争论。我想将 '%' 传递给 MySQL(我真的想要 '%m/%d/%Y' 但尝试转义百分比:%%)。

【问题讨论】:

  • 也许你必须两次逃脱它们:%%%m/%%%d/%%%Y
  • @furins 不,这不起作用。然后它认为 %m 是一个格式字符。
  • 你试过 3 和 4 %吗?
  • 4% 是原始错误信息
  • 那么三个%,你得到什么错误? (抱歉我暂时无法安装 MySQL-python 自己测试)

标签: python mysql mysql-python


【解决方案1】:

您没有为查询提供任何参数,因此% 被逐字处理。

简单:

con.execute("SELECT STR_TO_DATE(date_recieved, '%m/%d/%Y') from raw_table")

应该可以。

传递一个空的参数元组和转义百分比也应该起作用:

con.execute("SELECT STR_TO_DATE(date_recieved, '%%m/%%d/%%Y') from raw_table", ())

这不是 MySQLdb 特定的。

这个:

print "a %s %d" 

works - 百分号按字面意思解释,而这个:

print "a %s %d" % () 

没有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-30
    • 2013-09-01
    • 2020-12-24
    • 2016-05-31
    • 2012-10-05
    • 2017-10-22
    • 2013-01-03
    • 1970-01-01
    相关资源
    最近更新 更多