python - 选择订阅特定用户但该用户未订阅的所有用户

标签 python sql sqlalchemy many-to-many flask-sqlalchemy

我有以下表格定义:

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 端完成会不会更快?

最佳答案

如果这是在 SQL 中完成的,我相信您的查询将类似于以下内容:

SELECT
    u.id
FROM
    subscriptions sub  JOIN
    users u ON u.id = sub.subscriber_id LEFT JOIN
    subscriptions unsub
        ON unsub.subscribee_id = sub.subscriber_id
        AND unsub.subscriber_id= sub.subscribee_id 
WHERE
    sub.subscribee_id = :user_id
    AND unsub.subscribee_id IS NULL

关于python - 选择订阅特定用户但该用户未订阅的所有用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11871380/

相关文章:

python - 使用 sklearn LogisticRegression 和 RandomForest 模型的 Predict() 始终预测少数类 (1)

python - 如何在python 3.7中安装金字塔arima

python - 查找 HDF5 表中列中每个唯一值的最后时间戳的有效方法

SQL - 两列不同,第三列汇总值

python - 动态过滤来自 sqlalchemy 的数据

python - 从查询结果中获取一列的值列表

python - Django:如何使用values_list属性编写GET查询?

sql - 如何存储必须在上线前批准的用户配置文件编辑?

sql - 解释 DISTINCT COUNT(*) 的行为

python - 更新准备好的语句执行不正确