[英]How to update data of one column for all rows in SqlAlchemy?
對於單個記錄更新,我嘗試了以下代碼並且它正在工作。
uid=1
info = Info.query.filter_by(id=uid).first()
info.sold_status ='1'
db.session.add(info)
db.session.commit()
現在我想為多行更新一列。 我試過了:
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()
但它不起作用。
提前致謝 :)
建議未優化。 您可以使用以下選項進行更新: 1.
for row in Uninstall.query: # all() is extra
row.status = new_status
Session.commit()
如果有很多行,它會更快,但它會為每一行調用UPDATE
。 不好,是嗎?
2.
Uninstall.query.update({Uninstall.status: new_status})
Session.commit()
僅對所有行調用一個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)
如果您想將所有列的status
值更改為等於uid
,那么您可以簡單地無條件執行此操作:
update(Uninstall).values(status=uid)
最后,不要忘記提交:
session.commit()
來源: https : //docs.sqlalchemy.org/en/14/core/dml.html?highlight=update#sqlalchemy.sql.expression.update
查詢表以獲取行,您可以在迭代列時更新列並在完成后提交。
for row in Uninstall.query.all():
row.status = <new status>
db.session.commit()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.