【发布时间】:2019-07-28 02:36:37
【问题描述】:
有没有什么方法可以在不遍历每一行的情况下从数据框中进行 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 有一个“单线”真是太好了。从熊猫到postgresql没有类似的更新吗?或者是通过像我上面所做的那样遍历每一行来做到这一点的唯一方法。遍历每一行不是一种低效的方法吗?
【问题讨论】:
-
你能用
to_sql将数据帧写入临时表,然后在postgresql中进行更新吗?
标签: python postgresql pandas