Курсор PYODBC для обновления таблицы в базе данных SQL

Ниже приведен небольшой пример моего фрейма данных.

    In [121]: df
    Out[121]:
  TXN_KEY SEND_AGENT  PAY_AGENT
0  13273870  ANO080012  API352676
1  13274676  AUK359401  API352676
2  13274871  ACL000105  API352676
3  13275398  AED420319  API352676
4  13278566  ARA030210  API352676
5  13278955  AYM003098  API352676
6  13280334  AJ5020114  API352676
7  13280512  A11171047  API352676
8  13281278  AOG010045  API352676
9  13282118  AMX334165  API352676

Я пытаюсь использовать курсор в pyodbc, чтобы обновить таблицу "result" в базе данных сервера sql значениями dataframe

cursor.execute("Update result set Pay_Agent = df['PAY_AGENT'][0] where Send_Agent = df['SEND_AGENT'][0]")

Я получаю ниже ошибки:

 ProgrammingError: ('42000', "[42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near ''PAY_AGENT''. (102) (SQLExecDirectW)")

Но я проверяю, чтобы типы данных были правильно сопоставлены в моем заявлении об обновлении.

In [126]: type(df['PAY_AGENT'][0])
Out[126]: str

In [127]: type(df['SEND_AGENT'][0])
Out[127]: str

Любые идеи приветствуются.

1 ответ

Решение

Вам нужно будет правильно отформатировать ваш запрос, используя параметры:

cursor.execute("Update result set Pay_Agent = ? where Send_Agent = ?", (df['PAY_AGENT'][0], df['SEND_AGENT'][0]))

Использование связанных параметров таким способом важно на любом языке, который вы используете, чтобы избежать возможного внедрения SQL. Удачи!

Другие вопросы по тегам