Dip*_*iya 6 python mysql flask flask-sqlalchemy
对于单个记录更新,我尝试了以下代码并且它正在运行.
uid=1
info = Info.query.filter_by(id=uid).first()
info.sold_status ='1'
db.session.add(info)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)
现在我想为多行更新一列.我试过了:
for row in db.session.query(Uninstall.status).all():
print row.status
abc=row.status
abc=uid
db.session.add(row.status)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
提前致谢 :)
ant*_*uan 17
建议未优化.您可以使用选项进行更新:1.
for row in Uninstall.query: # all() is extra
row.status = new_status
Session.commit()
Run Code Online (Sandbox Code Playgroud)
如果有很多行,它可以更快,但它会UPDATE为每一行调用.不好,是吗?
2.
Uninstall.query.update({Uninstall.status: new_status})
Session.commit()
Run Code Online (Sandbox Code Playgroud)
仅为UPDATE所有行调用一个查询.
2021年答案
从sqlalchemy==1.4即将发布的 版本开始2.0,推荐的执行方法UPDATE是通过 SA 内置update函数,而不是.update方法。
例子:
from sqlalchemy import update
uid=1
# MY_CONDITION is whatever condition triggers the change in status value
update(Uninstall).where(MY_CONDITION).values(status=uid)
Run Code Online (Sandbox Code Playgroud)
如果您想将所有列的值更改为等于status,那么您可以简单地无条件地执行此操作:uid
update(Uninstall).values(status=uid)
Run Code Online (Sandbox Code Playgroud)
最后,不要忘记承诺:
session.commit()
Run Code Online (Sandbox Code Playgroud)
来源:https://docs.sqlalchemy.org/en/14/core/dml.html ?highlight=update#sqlalchemy.sql.expression.update
| 归档时间: |
|
| 查看次数: |
9754 次 |
| 最近记录: |