2016-07-07 8 views
2

シングルレコードの更新では、次のコードを試してみましたが、動作しています。SqlAlchemyのすべての行に対して1つの列のデータを更新するには?

uid=1 

info = Info.query.filter_by(id=uid).first() 
info.sold_status ='1' 
db.session.add(info) 
db.session.commit() 

ここで、複数の行に対して1つの列を更新したいとします。 私は試しました:

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() 

しかし、それは動作していません。事前に

感謝:)

+2

http://docs.sqlalchemy.org/en/rel_1_0/orm/query.html#sqlalchemy.orm.query.Query.update –

答えて

0
for row in Uninstall.query.all(): 
    print row.status 
    row.status = <new status> 
    db.session.add(row) 
    db.session.commit() 
+0

その作業のおかげでたくさん@Tushar santoki –

+3

あなたが追加する必要はありません '行をセッションに追加します。セッションを通してロードされました。 – dirn

5

提案が最適化されていません。行がたくさんある場合は、それが高速になります 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() 

すべての行に対して1つだけUPDATEクエリを呼び出します。

+0

申し訳ありません@antonio_antuanそれは仕事ではありません:(....... bczデータベースにnull値を保存しました....更新された値ではありません –

+0

値とは何の違いもありません:それはクエリにコンパイルされます: 'UPDATE uninstalls SET status = NEW_STATUS'。テーブルまたはクラスのDDLを表示できますか?またはSQLAで例外が発生しましたか? –

+0

uid = request.json.get( 'uid') Uninstall.query.all() :#all()は余分です row.status = uid db.session.commit()#あなたのコードは動作しません –

関連する問題