2017-05-31 3 views
0

Ich habe einige Python-Code, der wie folgtPython Fehler eine SQL-DB aktualisieren

import pypyodbc 
import pandas as pd 
home="c:/SQL/" 
df = pd.read_sql_query(sql4, conn3 
for y1 in range(0 , k): 
    ARCHIVE_SERNUM = (df['sernum']).iloc[y1] 
    KQL=len(KIC53_QUERY_LIST) 
    FOUND=False 
    for y2 in range(0,KQL): 
     if ARCHIVE_SERNUM == KIC53_QUERY_LIST[y2]: 
      FOUND=True 
      #do something then 
      break 
    if FOUND == False: 
     print(FOUND,ARCHIVE_SERNUM,"This is STIME : ",STIME) 
     CTIME=STIME 
     cursor = conn3.cursor() 
     cursor.execute(""" 
      UPDATE ENCOMPASS_DIA 
      SET CTIME=%s 
      WHERE SERNUM=ARCHIVE_SERNUM 
      """, (STIME)) 

Sein sieht einen Fehler zu werfen, und ich kann nicht herausfinden, was los ist. In diesem Beispiel entsprechen sowohl CTIME als auch STIME der gleichen 17-Zeichen-Zeichenfolge.

File "c:/SQL/ConnectionTest8.py", line 212, in <module> 
""", (STIME)) 

TypeError: Params must be in a list, tuple, or Row 

Antwort

1

In diesem Fall ist die richtige Update-Anweisung ist:

cursor.execute("""UPDATE ENCOMPASS_DIA SET CTIME=? WHERE SERNUM=?""", (SSTIME,ARCHIVE_SERNUM)) 
1

Ein einfach genug Fehler zu machen.

cursor.execute(""" 
     UPDATE ENCOMPASS_DIA 
     SET CTIME=%s 
     WHERE SERNUM=ARCHIVE_SERNUM 
     """, (STIME,)) 

sollte es eine Hinter , nach dem STIME oder (STIME) wird als eine Liste anstelle eines Tupels interpretiert werden.

+0

ist die Tatsache, dass ich einen Unterschied ein Zugang DB machen verwendet werden? Ihre Lösung führte zu dieser Fehlermeldung: ProgrammingError: ('42000', "[42000] [Microsoft] [ODBC Microsoft Access Driver] Syntaxfehler im Abfrageausdruck '% s'.") –

+0

Sorry verpasste das Pyodbc-Tag. Hier musst du '' 'anstelle von'% s' verwenden – e4c5

+0

Ist das jetzt erledigt? – e4c5

Verwandte Themen