SQLAlchemy中两个关联属性一个为None一个为空列表,原因何在?
问题原因分析
这个差异完全是由两个属性的SQLAlchemy关系(relationship)配置不同导致的:
output.equipment 初始为空列表:
这个属性的关系被定义为「一对多」或「多对多」类型,SQLAlchemy中这类关系默认uselist=True,框架会自动为属性初始化一个空的列表容器,所以你可以直接调用append()添加Equipment实例。
示例定义大概是这样:class Output(Base): __tablename__ = 'outputs' id = Column(Integer, primary_key=True) # 默认uselist=True,自动初始化为[] equipment = relationship("Equipment", back_populates="output")output.projects 初始为None:
要么是这个关系被显式设置了uselist=False(对应「一对一」关系),此时SQLAlchemy不会创建列表容器,初始值为None;要么是关系的反向关联配置有误,导致框架无法自动初始化集合。
比如一对一的定义:class Output(Base): __tablename__ = 'outputs' id = Column(Integer, primary_key=True) # uselist=False指定一对一,初始值为None projects = relationship("Project", back_populates="output", uselist=False)
如果你的需求是让projects支持添加多个实例,检查下关系定义,确保uselist=True(默认就是,不用特意写),同时确认反向关系(Project类里对应output的属性)配置正确即可。
内容的提问来源于stack exchange,提问作者abinitio
相关产品推荐
相关产品推荐

