与 sqlmodel 的一对一关系

cls*_*udt 5 python orm sqlalchemy sqlmodel

在学习完SQLModel教程后,我不记得看到过任何有关如何使用Relationship属性实现 1:1 关系的内容。

我找到了SQLAlchemy 的文档,但目前还不清楚这如何应用于 SQLModel。

代码示例:如何强制 User 和 ICloudAccount 具有 1:1 关系?

class User(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str
    icloud_account_id: Optional[int] = Field(default=None, foreign_key="icloudaccount.id")
    icloud_account: Optional["ICloudAccount"] = Relationship(back_populates="users")


class ICloudAccount(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    user_name: str
    users: List[User] = Relationship(back_populates="icloud_account")
Run Code Online (Sandbox Code Playgroud)

Joh*_*aly 17

您可以关闭列表功能以允许 SQLModel 将外键作为一对一。您可以使用 SQLalchemy 关键字来执行此操作uselist

class User(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str
    icloud_account_id: Optional[int] = Field(default=None, foreign_key="icloudaccount.id")
    icloud_account: Optional["ICloudAccount"] = Relationship(back_populates="user")


class ICloudAccount(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    user_name: str
    user: Optional["User"] = Relationship(
        sa_relationship_kwargs={'uselist': False},
        back_populates="icloud_account"
    )
Run Code Online (Sandbox Code Playgroud)