0
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?

SQLAlchemyで取得したレコードをまるっとコピーして新しいレコードとして挿入する方法

Last updated at Posted at 2024-02-02

SQLAlchemyで取得したレコードをコピーして新しいレコードとして挿入する際、
カラムが多いとレコードインスタンスを作成したときにカラムごとに代入していくのがだるいので動的に値をセットできるようにする際の議事録です。

# 既存のレコードを取得
existing_record = session.query(YourModel).filter(
    YourModel.id == record_id
).first()

# 新しいレコードインスタンスを作成
new_record = YourModel()

# 既存のレコードから新しいレコードへ属性をコピー
for column in YourModel.__table__.columns:
    setattr(new_record, column.name, getattr(existing_record, column.name))

# IDや他の一意性制約があるカラムの値を削除または変更
new_record.id = None  # IDが自動生成される場合、Noneに設定

# 新しいレコードをセッションに追加してコミット
session.add(new_record)
session.commit()

YourModel.__table__.columnsを使うことでモデルに定義したカラム一覧が取得できます。
ループで回し、setattrgetattrを組み合わせることでオブジェクトに値を動的に取得、代入することができます。

0
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
0
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?