使用这个模型:
class Ball(Base):
__tablename__ = 'balls'
id = Column(Integer, primary_key=True)
field_id = Column(Integer, ForeignKey('fields.id'))
field = relationship("Field", back_populates="fields")
class Field(Base):
__tablename__ = 'fields'
id = Column(Integer, primary_key=True)
nickname = Column(String)
fields= relationship("Ball", order_by=Ball.id, back_populates="field")
我正在尝试编写查询来访问Field.nickname和Ball.field_id。使用
result = session.query(Field, Ball).all()
print(result)
我能够检索
(<Field(id=1, nickname=stadium>, <Ball(id=1, field_id=newest)>), (<Field(id=1, nickname=stadium>, <Ball(id=2, field_id=oldest)>
但使用时
result = session.query(Field).join(Ball).all()
print(result)
我正在获取空列表[]
,无论我是否应用任何过滤器都无关紧要。根据{{3}},join
如果处理两个表会派上用场,所以这样我就可以在两个表中过滤相同的ID,我猜它在显示查询结果时会派上用场在jinja模板中。
答案 0 :(得分:0)
您的Field
课程中输入错误 - back_populates='fields'
与Ball
中的属性名称不匹配。
尝试将其更改为back_populates='field'
,使其与Ball
中定义的属性相匹配。正确定义关系后,sqlalchemy应该能够自动进行连接。