2016-04-17 2 views
1

Вот запрос я пытаюсь использовать:Ошибка при использовании STR_TO_DATE() вместе с заполнителем

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, запрос будет работать нормально. Но я хочу использовать переменную в этом месте для моего кода.

ответ

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)""" 
Смежные вопросы