【发布时间】:2014-08-05 21:21:15
【问题描述】:
我有两个表,一个是 users 表,另一个是 tweets 表。用户可以关注其他用户,并且用户可以收藏推文(多对多关系)。
这是在我的数据库中创建正确表的类:
follow = db.Table('follow',
db.Column('follower_id', db.Integer, db.ForeignKey('user.id')),
db.Column('following_id', db.Integer, db.ForeignKey('user.id'))
)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
following = db.relationship('User',
secondary = follow,
primaryjoin = (follow.c.follower_id == id),
secondaryjoin = (follow.c.following_id == id),
backref = db.backref('followers'))
favorite = db.Table('favorite',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('tweet_id', db.Integer, db.ForeignKey('tweet.id'))
)
class Tweet(db.Model):
id = db.Column(db.Integer, primary_key=True)
favorited = db.relationship('User', secondary=favorite,
backref=db.backref('favorites'))
现在,我要执行的查询是从给定用户正在关注的用户中选择所有收藏的推文。大意是这样的:
user = User.query.get(user_id)
Tweet.query.filter(Tweet.favorited.in_(user.following))
这不起作用,因为in_ 方法不支持模型对象。我不知道如何在不遍历数组的情况下做到这一点,我认为这根本没有效率。有什么想法吗?在一个查询中执行此操作的奖励积分...
【问题讨论】:
标签: sql flask sqlalchemy flask-sqlalchemy