簡體   English   中英

如何更新SqlAlchemy中所有行的一列數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM