SQLAlchemyで外部キーの使い方

SQLAlchemyを使用して外部キーを設定するには、ForeignKeyを使って関連づけたいテーブルのカラムに外部キー制約を設定します。以下に、簡単な例を示します。

考え方として、2つのテーブルがあると仮定します。users テーブルと addresses テーブルで、addresses テーブルには users テーブルの特定のユーザーを参照する外部キーが含まれています。

python
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship, Session # データベースに接続 engine = create_engine('sqlite:///example.db') # モデルの基底クラスを作成 Base = declarative_base() # ユーザーモデル class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) # Addressモデルとの関連付け addresses = relationship('Address', back_populates='user') # アドレスモデル class Address(Base): __tablename__ = 'addresses' id = Column(Integer, primary_key=True) email = Column(String) user_id = Column(Integer, ForeignKey('users.id')) # 外部キーの設定 # Userモデルとの関連付け user = relationship('User', back_populates='addresses') # テーブルの作成 Base.metadata.create_all(engine) # セッションを作成してデータベース操作 session = Session(engine) # ユーザーとアドレスを作成 user = User(name='John') address = Address(email='john@example.com', user=user) # セッションに追加してコミット session.add(user) session.add(address) session.commit() # ユーザーからアドレスにアクセス print(user.addresses[0].email)

この例では、Address テーブルの user_id カラムが users テーブルの id カラムを外部キーとして参照しています。また、relationship メソッドを使って、User クラスと Address クラスを相互に関連付けています。

このように設定することで、SQLAlchemyは外部キー制約をデータベースに対して適用し、またオブジェクトを操作する際に関連するオブジェクトを取得することができます。

未分類

Posted by ぼっち