【问题标题】:Update SQL Database based on matched ID in Dataframe根据 Dataframe 中匹配的 ID 更新 SQL 数据库
【发布时间】:2020-12-29 05:32:51
【问题描述】:

我有下面带有相应值的数据框,如果 ID 与我的数据框匹配,我想更新我的 SQL 数据库服务器

df 数据帧

ID VALUE
123 9
456 11

SQL 数据库服务器,表 1

ID VALUE
456 62
623 41
123 3
563 67

更新后,我希望我的 SQL 数据库服务器看起来像这样,您会注意到 ID 123 和 456 已根据我的数据框被赋予了一个新值。

ID VALUE
456 11
623 41
123 9
563 67

有人知道我在执行时如何在查询中使用它吗?

query = DELETE/UPDATE table table1 where ID = ID IN DATAFRAME

conn.execute(query) 

【问题讨论】:

  • 你是如何连接到 sql-server 的?另外,您是在处理 Pandas DataFrame 中的几条还是几千条记录?

标签: python sql sql-server dataframe


【解决方案1】:

您可以在 DML 语句中创建参数列表 (df_list),并根据语句中的外观排列列的顺序。在这种情况下,这两个参数(idvalue)应该倒序排列,例如

cur=con.cursor()
sql = "UPDATE [table1] SET [value] = ? WHERE [id] = ?"
cols = df.columns.tolist()
df_list = df[cols[-1:] + cols[:-1]].values.tolist()                                                         
cur.executemany(sql,df_list)
cur.close()
con.commit()
con.close()

【讨论】:

    【解决方案2】:

    您可以简单地进行如下关联查询:

    update table1 t1
       set t1.value = (select df.value from df where df.id = t1.id)
    where exists (select 1 from df where df.id = t1.id);
    

    或在update 中使用Inner join,如下所示:

    UPDATE T
    SET T.value = d.value -- , another column updates here 
    FROM table1 as t
    INNER JOIN df as d ON t.id = d.id;
    

    【讨论】:

    • 我应该澄清我想更新整行(假设表中有更多列)并且在这种情况下需要使用 sqlalchemy 来执行查询
    • 您可以更新任意数量的列。查看更新的答案
    猜你喜欢
    • 2016-11-18
    • 2021-08-12
    • 1970-01-01
    • 2022-01-22
    • 2019-12-01
    • 2010-09-18
    • 2021-08-12
    • 1970-01-01
    相关资源
    最近更新 更多