次のテーブル定義があります。
subscriptions = db.Table("subscriptions",
db.Column("subscriber_id", db.Integer, db.ForeignKey("users.id"),
primary_key=True),
db.Column("subscribee_id", db.Integer, db.ForeignKey("users.id"),
primary_key=True),
)
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
subscribes = db.relationship('User', secondary=subscriptions,
backref=db.backref('subscribed'),
primaryjoin="User.id==subscriptions.c.subscriber_id",
secondaryjoin="User.id==subscriptions.c.subscribee_id",
)
特定のユーザーを購読しているが、そのユーザーが購読していないすべてのユーザーを選択するクエリを作成する必要があります。私はすでに Python でこれを行うことができます (おそらく、私の説明よりも正確に私が望むものをより明確に示しているでしょう):
filter(lambda u: u not in self.subscribes, self.subscribed)
# OR: set(self.subscribed) - set(self.subscribes)
しかし、SQL 側で行うと速くなりませんか?