Pandas PYODBC游标更新SQL数据库中的表

Pandas PYODBC游标更新SQL数据库中的表,pandas,pyodbc,Pandas,Pyodbc,下面是我的数据帧的一个小示例 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

下面是我的数据帧的一个小示例

    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中的游标用dataframe值更新sql server数据库中的表“result”

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)")
但我要确保数据类型在update语句中正确匹配

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

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

非常感谢您的见解。

您必须使用以下参数正确设置查询格式:

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

在您使用的任何语言中,以这种方式使用绑定参数对于避免可能的SQL注入都很重要。祝你好运

您必须使用参数正确设置查询格式:

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

在您使用的任何语言中,以这种方式使用绑定参数对于避免可能的SQL注入都很重要。祝你好运

使用参数将
df
值传递给SQL Server,而不是尝试将它们嵌入update语句中。有关详细信息,请参见我的答案-它引用了一个select查询,但更新的步骤是相同的。@Bryan很难了解解决方案中用于传递给df的参数的确切位置。在我的示例中,您能指出如何做到这一点吗?使用参数将
df
值传递给SQL Server,而不是尝试将它们嵌入update语句中。有关详细信息,请参见我的答案-它引用了一个select查询,但更新的步骤是相同的。@Bryan很难了解解决方案中用于传递给df的参数的确切位置。你能在我的例子中指出如何做吗?关于如何参数化create:cursor.execute(““创建表结果?bigint主键”,varchar(9),?varchar(9)”,x[0],x[1],x[2])x=df.columns.tolist()编程错误:('42000',“[42000][Microsoft][SQL Server原生客户端11.0][SQL Server]“@P1.”(102)(SQLExecDirectW)”附近的语法不正确关于如何参数化create:cursor.execute(“创建表结果?bigint主键,varchar(9),?varchar(9)”,x[0],x[1],x[2])x=df.columns.tolist()编程错误:('42000',“[42000][Microsoft][SQL Server原生客户端11.0][SQL Server]“@P1.”(102)(SQLExecDirectW)”附近的语法不正确