1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【SQLAlchemy】forで一個づつデータ更新するのなんかなぁ…ってとき

Last updated at Posted at 2023-02-20

やりたいこと

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のが使いそう。

参考記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?