Flask / SQLAlchemy - 无法正确查询关系

时间:2017-04-29 11:40:40

标签: python sqlalchemy

我在Flask中有以下代码。我希望用户能够关注指定的RSS源,这些RSS源保存在'relationships_feed'表中,但我无法正确输出。

模型

users = db.session.query(User)

for user in users:
    print (user.first_name)
    print (user.last_name)
    print (user.email)
    print (user.feeds)

以下是我在解决问题时调用代码的方法。

预期结果是 user.feeds 会根据 relationships_feed 表中的数据返回他订阅的所有Feed。

致电代码

11:21:40 web.1    | Robert
11:21:40 web.1    | Williams
11:21:40 web.1    | svelazquez@jones.org
11:21:40 web.1    | SELECT feeds.id AS feeds_id, feeds.feed_url AS feeds_feed_url, feeds.feed_name AS feeds_feed_name
11:21:40 web.1    | FROM feeds, relationships_feed
11:21:40 web.1    | WHERE ? = relationships_feed.user_id AND feeds.id = relationships_feed.feed_id

输出(db中的假数据)

nairabox.com

我收到的全部是原始查询本身,这让我觉得我没有正确查询它,但我已经通过多个指南和文档仍然无法解决。这是一个我错过的简单修复吗?

1 个答案:

答案 0 :(得分:3)

  

您需要在懒惰的关系中致电.all()

feeds = db.relationship('Feed', secondary='relationships_feed', backref='user', lazy='dynamic')

在你的模型中,你使这种关系变得懒惰,这意味着在访问feeds属性时,它不会获得所有项目,但你必须通过调用user.feeds.all()或使用显式获取所有这些项目它就像迭代器一样。

for feed in user.feeds:
    print(feed)

您可以立即获取所有Feed

feeds = user.feeds.all()

在你的场景中,

for user in users:
    print (user.first_name)
    print (user.last_name)
    print (user.email)
    print (user.feeds.all()