【问题标题】:pyodbc not updating tablepyodbc 不更新表
【发布时间】:2019-07-09 15:39:10
【问题描述】:

我查询一个表,然后循环遍历它以更新另一个表。 控制台打印显示正确的数据。

不确定如何为 UPDATE 查询调试 cursor.execute

它没有在桌子上更新。这不是权限问题。如果我在我的 SQL 工作台上运行更新命令,它工作正常。

cursor = conn.cursor()

cursor.execute("Select Account_Name FROM dsf_CS_WebAppView")
for row in cursor.fetchall():
try:
    cursor.execute("Select fullpath FROM customerdesignmap WHERE 
fullpath LIKE '%{}%'".format(row.Account_Name))
    rows = cursor.fetchall()
    print(len(cursor.fetchall()))
    if len(rows) > 0:
        for rowb in rows:
            print(rowb.fullpath)
            print(row.Account_Name)
            if len(row.Account_Name) > 2:
                cursor.execute("UPDATE customerdesignmap SET householdname = {}, msid = {} WHERE fullpath LIKE '{}'".format(row.Account_Name, row.UniqueProjectNumber, rowb.fullpath))
                conn.commit()
except:
    pass

【问题讨论】:

  • 生成的SQL是什么?您可以将其作为独立查询执行吗?我会从那里开始。
  • @Rayen - 在您的except 块中使用pass,您将默默地丢弃更新语句可能抛出的任何错误。我的猜测是,您生成的动态 SQL 语法无效,可能是由于未引用的字符串值。无论如何,您都应该使用查询参数,例如,... SET householdname = ?, ...

标签: python sql sql-server pyodbc


【解决方案1】:

考虑使用纯 SQL 解决方案,因为 SQL Server 支持跨多个表的 UPDATEJOIN。这避免了 SQL 命令的嵌套循环、游标调用和字符串格式。

UPDATE m
SET m.householdname = v.Account_Name, 
    m.msid = v.UniqueProjectNumber
FROM customerdesignmap m
JOIN dsf_CS_WebAppView v 
  ON m.fullpath LIKE CONCAT('%', v.Account_Name, '%')

在 Python 中,在单个 cursor.execute()commit() 调用中运行。

cursor.execute('''my SQL Query''')
conn.commit()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多