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 должна автоматически выполнять соединение.

Другие вопросы по тегам