2017-05-31 92 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