2016-04-17 5 views
1

Hier ist die Abfrage, die ich zu verwenden, ich versuche:Fehler bei der Verwendung STR_TO_DATE() zusammen mit einem Platzhalter

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) 

Es diesen Fehler immer wieder zu werfen:

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 

Der Fehler nicht in kommt, wenn Ich verwende keinen Platzhalter für DEST_LOC_NBR, z. Wenn ich einfach DEST_LOC_NBR = 3950 setze, wird die Abfrage gut funktionieren. Aber ich möchte eine Variable an diesem Ort für meinen Code verwenden.

Antwort

1

Die % Zeichen im '%M/%D/%Y' Format auf der Python-Ebene interpretiert werden, wo die string formatting operation dann beschwert es kein M Format (es wäre für %D und %Y das gleiche tun).

Doppelte % ihnen zu entkommen (Einzel % Zeichen werden in die Datenbank gesendet):

'%%M/%%D/%%Y' 

Der vollständige String Definition dann wäre

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)""" 
Verwandte Themen