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