SQLAlchemy查询连接

时间:2017-09-07 18:34:11

标签: python sqlite sqlalchemy

使用这个模型:

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模板中。

1 个答案:

答案 0 :(得分:0)

您的Field课程中输入错误 - back_populates='fields'Ball中的属性名称不匹配。

尝试将其更改为back_populates='field',使其与Ball中定义的属性相匹配。正确定义关系后,sqlalchemy应该能够自动进行连接。