2013-03-27 133 views
2

我发现在我漫长复杂的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'但尝试转义百分比:%%)。

+2

也许你必须将它们转义两次:'%%% m/%%% d/%%% Y' – furins 2013-03-27 21:48:05

+0

@furins nope,这是行不通的。那么它就会认为%m是格式字符。 – fgregg 2013-03-27 21:55:07

+0

你是否用3和4'%'尝试过? – furins 2013-03-27 21:55:59

回答

3

您没有提供任何参数给您的查询,因此%的字面处理。

简单:

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" 

作品 - 百分号字面解释,而这一点:

print "a %s %d" %() 

没有。