sqlalchemy - 如何获取所有不处于多对多关系的行

标签 sqlalchemy flask-sqlalchemy

我需要获取所有不引用该组的用户。 在 SQL 中,它就像 NOT EXIST。但我不知道如何在 SQLAlchemy 的 ORM 中做到这一点。

models.py
group_table = Table('assoc_groups_users', Base.metadata,
                Column('user_id', Integer, ForeignKey('users.id')),
                Column('group_id', Integer, ForeignKey('groups.id'))
                )

class Users(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True)
    name = Column(String(50), unique=False)

class Groups(Base):
    __tablename__ = "groups"
    id = Column(Integer, primary_key=True)
    title = Column(String(127))

    users = relationship("Users",
                           secondary=books_table,
                           backref=backref("books", lazy='dynamic'))

最佳答案

使用 relationships(小而简单的代码,但有点冗长的 SQLEXISTS 并且并不真正需要在 上加入组表):

query = session.query(Users).filter(~Users.groups.any())

否则,使用outerjoinwhere,非常直接,生成类似于一对一查询的SQL:

query = (session.query(Users)
        .outerjoin(group_table, group_table.c.user_id == Users.id)
        .filter(group_table.c.user_id == None)
        )

关于sqlalchemy - 如何获取所有不处于多对多关系的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22618500/

相关文章:

python - SQLAlchemy 查询与多列元组上的比较

python - 在flask-sqlalchemy中使用with_entities()返回自定义属性?

python - 模块未找到错误: No module named 'flask_sqlalchemy' error in Azure Web App

python - Flask SQLAlchemy - 仅为当前 session 设置 expire_on_commit=False

python - 我是否需要创建/更新两个模型才能在 Flask 中插入一对多?

python - "D"消息中的数据不足

python - SQLAlchemy - 创建无符号 BigInteger 的正确方法

python - 在 Celery 任务中所做的数据库更改在主线程中不可见

python - 使用 SQLAlchemy 在模型上按外键关系定义计数

python - 如何从 SQLalchemy 模型创建 json 树结构