SQLAlchemyを使用したOne-to-Oneリレーションシップの実装方法


SQLAlchemyはPythonのための強力なオブジェクトリレーショナルマッパー(ORM)です。One-to-Oneリレーションシップを実装するために、外部キー制約を使用する方法について説明します。

以下は、SQLAlchemyを使用してOne-to-Oneリレーションシップを実装する例です。

from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
Base = declarative_base()
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    profile = relationship("Profile", uselist=False, back_populates="user")
class Profile(Base):
    __tablename__ = 'profiles'
    id = Column(Integer, primary_key=True)
    bio = Column(String(255))
    user_id = Column(Integer, ForeignKey('users.id'))
    user = relationship("User", back_populates="profile")
engine = create_engine('sqlite:///example.db')
Base.metadata.create_all(engine)

上記のコードでは、UserテーブルとProfileテーブルの間にOne-to-Oneリレーションシップを作成しています。Userテーブルのprofile列とProfileテーブルのuser列が関連付けられています。

relationship関数を使用して、UserテーブルとProfileテーブルの関連付けを定義しています。uselist=Falseを設定することで、One-to-Oneの関係性を指定しています。

また、back_populatesパラメータを使用して、関連するテーブルの関連名を指定しています。これにより、UserオブジェクトからProfileオブジェクトにアクセスすることができます。

最後に、データベースを作成するためにcreate_all関数を呼び出しています。

これで、SQLAlchemyを使用してOne-to-Oneリレーションシップを実装する方法がわかりました。必要に応じて、追加のカラムや制約を定義することもできます。また、他のデータベースシステムでも同様の方法でリレーションシップを作成することができます。

以上が、SQLAlchemyを使用したOne-to-Oneリレーションシップの実装方法です。