pyodbc не обновляет таблицу - PullRequest
2 голосов
/ 09 июля 2019

Я запрашиваю таблицу, затем перебираю ее, чтобы обновить другую таблицу. На консоли «Печать» отображаются правильные данные.

Не уверен, как отладить cursor.execute для запроса UPDATE.

Это не обновление на столе. Это не проблема разрешения. Если я запускаю команду обновления на своем рабочем месте 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

1 Ответ

2 голосов
/ 09 июля 2019

Рассмотрим чисто SQL-решение, поскольку SQL Server поддерживает UPDATE и JOIN для нескольких таблиц. Это позволяет избежать вложенных циклов, вызовов курсора и форматирования строк команд 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()
...