下面是我的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
我相信这将帮助其他人试图实现同样的目标。