0

在完成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")
4

1 回答 1

2

您可以关闭列表功能以允许 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"
    )
于 2022-01-19T13:23:38.547 回答