Pyodbc 游标,用于循环访问数据帧并在 sql 中插入



下面是我的SQL表和数据帧:

    TXN_KEY SEND_AGENT  Pay_Agent
13273870    ANO080012   NULL
13274676    AUK359401   NULL
13274871    ACL000105   NULL
13275398    AED420319   NULL
13278566    ARA030210   NULL
13278955    AYM003098   NULL
13280334    AJ5020114   NULL
13280512    A11171047   NULL
13281278    AOG010045   NULL
13282118    AMX334165   NULL
In [212]: df
Out[212]:
TXN_KEY SEND_AGENT  PAY_AGENT
13273870  ANO080012  API352676
13274676  AUK359401  AED002782
13274871  ACL000105  ACB020203
13275398  AED420319  ASE094882
13278566  ARA030210  AII071196
13278955  AYM003098  AHX012817
13280334  AJ5020114  AED000438
13280512  A11171047  AEL051943
13281278  AOG010045  ADJ031448
13282118  AMX334165  APM033226

下面的光标语句在 sql 服务器中添加了 Pay_Agent 的第一个值就可以了

    cursor.execute("""update result SET Pay_Agent = ? WHERE SEND_AGENT = ?""",df['PAY_AGENT'][0],df['SEND_AGENT'][0])
13273870    ANO080012   API352676
13274676    AUK359401   NULL
13274871    ACL000105   NULL
13275398    AED420319   NULL
-------

如何在 for 循环中对此游标语句进行编码,以循环访问整个数据帧并将值发布到 SQL 服务器。

我建议以不同的方式做:

df另存为 SQL Server 表(假设:tmp_result

df.to_sql('tmp_result', conn, if_exists='replace')

,然后按如下所示更新表:

update result 
  set result.Pay_Agent = tmp_result.Pay_Agent
FROM result
INNER JOIN tmp_result
  on result.SEND_AGENT = tmp_result.SEND_AGENT;

这样您就可以在不循环的情况下实现目标

以下是遍历数据帧的方法:

     for index,rows in df.iterrows():
      cursor.execute("""update result SET Pay_Agent = ? WHERE SEND_AGENT = ?""",df['PAY_AGENT'][rownum],df['SEND_AGENT'][rownum])
     rownum+=1

我相信这将帮助其他人试图实现同样的目标。

相关内容

  • 没有找到相关文章

最新更新