やりたいこと
SQLAlchemyでAPIを実装してるときにループで毎度commitするのなんかぁ。
一括でデータ更新したい!って思ったらあった。
全ユーザーの居住地を大阪に変えちゃう
test_api.py
# データベースからデータ取得
users_data = db.session.query(UserModel).all()
# 取得したデータをforでループさせて更新したいカラムを指定(address)して更新する値を入れる
user_data_update = [{'user_id': user_data.user_id, 'address': '大阪' } for user_data in users_data]
# bulk_update_mappingsメソッドに更新対象のモデルと先ほどの変数を指定して一括で更新
db.session.bulk_update_mappings(UserModel, user_data_update)
# データベースに登録
db.session.commit()
bulk_update_mappings
今回の場合だとuser_idが主キーなのですが、更新データは一意の主キーを見て判断しているので、最初の引数に入れてください。
第二引数には値を更新したデータたちをリスト型で渡します。
注意
bulk_update_mappingsを使用する場合はORMのメソッドが使用できないので、使用したい場合は上記のように事前に更新データを取得しておく必要があります。
insertもあるらしいけど、updateのが使いそう。
参考記事