更新 SQL 数据库的 Python 错误

Posted

技术标签:

【中文标题】更新 SQL 数据库的 Python 错误【英文标题】:Python error updating a SQL DB 【发布时间】:2017-05-31 08:43:30 【问题描述】:

我有一些看起来像这样的python代码

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=%s
        WHERE SERNUM=ARCHIVE_SERNUM
        """, (STIME, ))

STIME 之后应该有一个尾随 ,,否则 (STIME) 将被解释为列表而不是元组。

【讨论】:

我使用访问数据库这一事实是否有所作为?您的解决方案导致此错误消息:ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Microsoft Access Driver] Syntax error in query expression '%s'.") 抱歉错过了 pyodbc 标签。在这里你必须使用? 而不是%s 现在解决了吗? 对不起,我发现了错误并发布了结果,然后发现那个'%s'错误,然后忘记按接受箭头。【参考方案2】:

在这种情况下,正确的更新语句是:

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

【讨论】:

以上是关于更新 SQL 数据库的 Python 错误的主要内容,如果未能解决你的问题,请参考以下文章

SQL更新查询引发语法错误[关闭]

更新查询的 MS Access SQL 错误

SQL Server修改表的时候出现错误:未更新任何行

Python学习笔记

如何在 Redshift 数据库上从 Python 触发更新 SQL

Sql Server 忽略更新错误