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)
Я получаю пустой список []
, не имеет значения, применяю ли я какие-либо фильтры или нет. Согласно официальным документам, join
может пригодиться, если иметь дело с двумя таблицами, поэтому таким образом я смогу отфильтровать один и тот же идентификатор в обеих, и я думаю, это пригодится при отображении результатов запроса в шаблоне jinja.
1 ответ
У вас есть опечатка в вашем Field
учебный класс - back_populates='fields'
не совпадает с именем атрибута в Ball
,
Попробуйте изменить это на back_populates='field'
так что он соответствует атрибуту, определенному в Ball
, С правильно определенными отношениями sqlalchemy должна автоматически выполнять соединение.