DB
mysql> select * from comment;
+----+--------+---------+
| id | body | post_id |
+----+--------+---------+
| 1 | first | 1 |
| 2 | second | 1 |
| 3 | third | 1 |
+----+--------+---------+
3 rows in set (0.00 sec)
mysql> select * from post;
+----+-------+
| id | title |
+----+-------+
| 1 | abc |
+----+-------+
Модели
class Comment(Base):
__tablename__ = 'comment'
id = Column(Integer, primary_key=True, autoincrement=True)
body = Column(Unicode(255))
post_id = Column(ForeignKey('post.id'))
class Post(Base):
__tablename__ = 'post'
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(Unicode(255), nullable=False)
comments = relationship('Comment', lazy='noload')
Запрос отношения comments
, принадлежащего Post
.
post = session.query(Post).join(
Comment,
Comment.post_id == Post.id,
).options(
contains_eager(Post.comments)
).first()
print(post.comments)
print(post.comments[0].__dict__)
Результат
[<models.Comment object at 0x10fa70eb0>]
{'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x10d151ee0>, 'id': 1, 'post_id': 1, 'body': 'first'}
Как вы знаете, я добавил опцию lazy='noload'
для отношения комментариев.
Однако это не имеет никакого отношения с опцией contains_eager.
Но результат запроса возвращает только первые комментарии.
Почему он не возвращает все комментарии, связанные с post_id = 1?
Спасибо.