重複する場合は上書きとかの処理できる?

SQLAlchemyでは、データベースに新しいレコードを追加する際に、既存のレコードと重複する場合の処理を指定することができます。これは通常、session.merge()session.add() の際の unique 制約などに対応します。

以下は、merge を使って新しいレコードを追加する際に、既に同じ主キーが存在する場合には上書きする例です。

python
from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import Session engine = create_engine('sqlite:///example.db') Base = declarative_base() session = Session(engine) class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String, unique=True) Base.metadata.create_all(engine) # ユーザーを追加 new_user = User(name='John') session.merge(new_user) session.commit() # 同じ名前のユーザーを追加(重複する場合は上書き) duplicate_user = User(name='John') session.merge(duplicate_user) session.commit()

この例では、name カラムに unique=True 制約があり、同じ名前のユーザーを追加しようとすると merge 操作によって上書きが行われます。データベースにおける具体的な処理はデータベースエンジンに依存するため、使用しているデータベースによって異なる挙動があるかもしれません。上記の例はSQLiteを使用しています。

未分類

Posted by ぼっち