我设置了以下类来使用 sqlalchemy 定义表:
项目
class Project(Base):
__tablename__ = "projects"
id: Mapped[int] = mapped_column(primary_key=True, nullable=True)
title: Mapped[str] = mapped_column()
outputs: Mapped[list[ResearchOutput]] = relationship(
secondary=proj_output_association_tbl, back_populates="projects", uselist=True
)
users: Mapped[list[User]] = relationship(
secondary=project_association_tbl, back_populates="projects"
)
def __init__(
self,
pure_id: int,
title: str,
) -> None:
self.id = id
self.title = title
输出
class Output(Base):
__tablename__ = "outputs"
id: Mapped[int] = mapped_column(primary_key=True, nullable=True)
users: Mapped[list[User]] = relationship(
secondary=output_association_tbl, back_populates="outputs"
)
title: Mapped[str] = mapped_column()
projects: Mapped[Optional[Project]] = relationship(
secondary=proj_output_association_tbl,
back_populates="outputs",
)
equipment: Mapped[Optional[Equipment]] = relationship(
secondary=equipment_association_tbl,
back_populates="outputs",
)
def __init__(
self,
id: int,
title: str,
) -> None:
self.pure_id = pure_id
self.title = title
设备 类设备(基础):
__tablename__ = "equipment"
id: Mapped[str] = mapped_column(primary_key=True, nullable=True)
outputs: Mapped[list[ResearchOutput]] = relationship(
secondary=equipment_association_tbl, back_populates="equipment"
)
name: Mapped[str] = mapped_column()
def __init__(
self,
id: int,
name: str,
) -> None:
self.name = name
self.id = id
我可以初始化
Output
的实例,并通过初始化它们并附加到 equipment
来将 output.equipment
添加到其中,因为 output.equipment
被初始化为空列表 []
。
但是,当我尝试采用完全相同的方法来设置输出项目时,我无法做到这一点,因为
output.projects
被初始化为 None
。
谁能解释一下为什么会这样?
谢谢!
我猜这与类型提示有关
class Output(Base):
...
projects: Mapped[Optional[Project]] = relationship(
secondary=proj_output_association_tbl,
back_populates="outputs",
)
尝试更改为
Mapped[List[Project]] = ...