【问题标题】:Pyodbc cursor to loop through a dataframe and insert in sqlPyodbc 游标循环遍历数据框并插入 sql
【发布时间】:2016-06-02 15:28:06
【问题描述】:

下面是我的 SQL TABLE 和 DATAFRAME:

    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 server中添加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 服务器。

【问题讨论】:

    标签: python sql-server-2008 pandas dataframe pyodbc


    【解决方案1】:

    我建议以不同的方式进行:

    将您的 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;
    

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

    【讨论】:

    • 这会覆盖表结构。当我尝试这个时,数据类型被从 int 覆盖为 varchar(max)。
    【解决方案2】:

    下面是循环遍历数据框的方法:

         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
    

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

    【讨论】:

      猜你喜欢
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      相关资源
      最近更新 更多