gpt4 book ai didi

python - Pandas 更新sql

转载 作者:IT老高 更新时间:2023-10-28 21:58:24 26 4
gpt4 key购买 nike

有没有什么方法可以在不遍历每一行的情况下从数据框中进行 SQL 更新?我有一个 postgresql 数据库,要从数据框中更新数据库中的表,我会使用 psycopg2 并执行以下操作:

con = psycopg2.connect(database='mydb', user='abc', password='xyz')
cur = con.cursor()

for index, row in df.iterrows():
sql = 'update table set column = %s where column = %s'
cur.execute(sql, (row['whatver'], row['something']))
con.commit()

但另一方面,如果我从 sql 读取表或将整个数据帧写入 sql(没有更新位置),那么我只会使用 pandas 和 sqlalchemy。比如:

engine = create_engine('postgresql+psycopg2://user:pswd@mydb')
df.to_sql('table', engine, if_exists='append')

使用 to_sql 有一个“单线”真是太好了。从 Pandas 到postgresql没有类似的更新吗?或者是通过像我上面所做的那样遍历每一行来做到这一点的唯一方法。遍历每一行不是一种低效的方法吗?

最佳答案

考虑一个临时表,它是您最终表的精确副本,每次运行都会清除:

engine = create_engine('postgresql+psycopg2://user:pswd@mydb')
df.to_sql('temp_table', engine, if_exists='replace')

sql = """
UPDATE final_table AS f
SET col1 = t.col1
FROM temp_table AS t
WHERE f.id = t.id
"""

with engine.begin() as conn: # TRANSACTION
conn.execute(sql)

关于python - Pandas 更新sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31988322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com