我在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
我收到的全部是原始查询本身,这让我觉得我没有正确查询它,但我已经通过多个指南和文档仍然无法解决。这是一个我错过的简单修复吗?
答案 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()