python - 使用 sqlalchemy 使用数据框列更新现有表的列
问题描述
我在后端有一个表(sql server)
table1
id column1 column2
xxx sada NULL
yyy dasa NULL
zzz awas NULL
我有一个数据框--result_df
列- result_df.column2
,并想更新表,但它不工作
session.query(table1).filter(table1.Id == result_df.id).update({table1.column2: result_df.column2})
但它不起作用,有没有更好的方法来做到这一点
我正在使用 sqlalchemy 和 python
解决方案
这里有一个有用的文档:https ://docs.sqlalchemy.org/en/14/core/tutorial.html#inserts-updates-and-deletes
为了根据数据框更新每一行,我们需要使用带有指定每个值的字典列表的bindparam 。
我用 和 转换了数据框,to_dict('records')
因为'id' 保留用于 VALUES 中的自动使用,我将id
列转换为_id
.
from sqlalchemy import bindparam
params = [{'_id' if k[0] == 'id' else k[0]: k[1]
for k in d.items()} for d in df.to_dict('records')]
stmt = table1.update() \
.where(table1.c.id == bindparam('_id')) \
.values(column2=bindparam('column2'))
con.execute(stmt, params)
完整的工作示例:https ://ideone.com/3TQmZ7
文档中另一个更明确的示例:
stmt = (users_table.update().
where(user_table.c.name == bindparam('username')).
values(fullname=bindparam('fullname'))
)
connection.execute(
stmt, [{"username": "wendy", "fullname": "Wendy Smith"},
{"username": "jack", "fullname": "Jack Jones"},
]
)
推荐阅读
- node.js - 进口资产发行,电子锻造
- plot - 带有 epslatex 的 Gnuplot:如何在生成输出时处理错误
- javascript - 按属性值对对象属性进行排序
- ios - Flutter - 命令 PhaseScriptExecution 失败,退出代码非零
- firebase - 使用 WooCommerce 和 Firebase 管理 PayPal 订阅事件
- python - 如何使用 txt 文件而不是文章?(Python)
- java - How to disable the ability to click on the JTextArea
- c# - EF Core 中 AddorUpdate 方法的替代方法是什么?
- ios - DSYM file is not uploaded to firebase while running build in azure CI Environment
- git - Github problem loading files > 100MB failed to push some refs to github directory