2017-05-31 89 views
0

我有一些Python代碼看起來像這樣Python的錯誤更新SQL數據庫

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)) 

它拋出一個錯誤,我無法弄清楚到底是怎麼回事。 在這個例子中,CTIME和STIME都是相同的17個字符的字符串。

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

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

回答

1

在這種情況下,正確的更新語句是:

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

一個很容易犯的錯誤。

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

應該有STIME或(STIME)後尾隨,將被解釋爲一個列表,而不是一個元組。

+0

沒有我使用的是Access數據庫的事實有所作爲?您的解決方案導致此錯誤消息: ProgrammingError:('42000',「[42000] [Microsoft] [ODBC Microsoft Access Driver]查詢表達式'%s'中的語法錯誤。」) –

+0

抱歉遺漏了pyodbc標記。在這裏你必須使用'?'而不是'%s' – e4c5

+0

現在這整理了嗎? – e4c5