2016-06-01 6 views
0

Ниже приведен небольшой пример моего dataframePYODBC курсор, чтобы обновить таблицу в базе данных 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 обновить «результат» таблицы в 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)") 

Но я, убедившись, что типы данных правильно согласующее d в моей инструкции обновления.

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

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

Любые идеи оцениваются.

+0

Используйте параметры для передачи значений 'df' на SQL Server, вместо того, чтобы вставлять их в инструкцию обновления. См. Мой ответ [здесь] (http://stackoverflow.com/a/9521382/366335) для получения дополнительной информации - он ссылается на запрос выбора, но шаги для одного обновления одинаковы. – Bryan

+0

@Bryan с трудом следит за тем, где именно в вашем решении используются параметры, используемые для перехода к df. Можете ли вы указать, как это сделать в моем примере? –

ответ

1

Вы должны отформатировать запрос должным образом с помощью параметров:

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

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

+0

любая идея о том, как параметризировать create: cursor.execute ("" "Создать результат таблицы? Bigint Первичный ключ,? Varchar (9),? Varchar (9)" "", x [0], x [1] , x [2] ) x = df.columns.tolist() ProgrammingError: ('42000', "[42000] [Microsoft] [Собственный клиент SQL Server 11.0] [SQL Server] Неверный синтаксис рядом с '@ P1' . (102) (SQLExecDirectW) ") –

 Смежные вопросы

  • Нет связанных вопросов^_^