Pyodbc不更新表

时间:2019-07-09 15:39:10

标签: python sql sql-server pyodbc

我查询一个表,然后遍历该表以更新另一个表。 控制台的Prints显示正确的数据。

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

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

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

1 个答案:

答案 0 :(得分:2)

请考虑一个纯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()