以下是我尝试使用的查询:
sql= """SELECT APPT_NBR, STR_TO_DATE(APPT_SCHD_ARVL_TS,'%M/%D/%Y')AS Schd,
STR_TO_DATE(APPT_ACTL_ARVL_TS,'%M/%D/%Y) AS actl,
DEST_LOC_NBR, CARRIER_TYP_NBR,
VND_NBR, VND_NBR_SUPPLIER, APPT_TYP_NBR, APPT_NBR_OF_CNTRS
FROM mixeddata
WHERE DEST_LOC_NBR= (%s)"""
c.execute(sql, loc_nbr)
它一直在抛出这个错误:
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/PyMySQL3-0.5-py3.5.egg/pymysql/cursors.py", line 105, in execute
query = query % escaped_args
ValueError: unsupported format character 'M' (0x4d) at index 95
如果我没有为DEST_LOC_NBR使用占位符,则不会出现错误。如果我只是把DEST_LOC_NBR = 3950,那么查询就可以了。但我想在我的代码中使用该位置的变量。
答案 0 :(得分:1)
%
格式的'%M/%D/%Y'
字符在Python级别进行解释,然后string formatting operation会抱怨没有M
格式(它会执行相同的操作) %D
和%Y
)。
将%
加倍以转义它们(单%
个字符将被发送到数据库):
'%%M/%%D/%%Y'
完整的字符串定义将是
sql= """SELECT APPT_NBR, STR_TO_DATE(APPT_SCHD_ARVL_TS,'%%M/%%D/%%Y')AS Schd,
STR_TO_DATE(APPT_ACTL_ARVL_TS,'%%M/%%D/%%Y) AS actl,
DEST_LOC_NBR, CARRIER_TYP_NBR,
VND_NBR, VND_NBR_SUPPLIER, APPT_TYP_NBR, APPT_NBR_OF_CNTRS
FROM mixeddata
WHERE DEST_LOC_NBR= (%s)"""