与 sqlmodel 的一对一关系

one-to-one relationships with sqlmodel

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

我找到了 documentation for 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")

您可以关闭列表功能以允许 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"
    )