我需要获取所有不引用该组的用户。
在 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'))
最佳答案
使用 relationship
s(小而简单的代码,但有点冗长的 SQL
与 EXISTS
并且并不真正需要在 上加入组
表):
query = session.query(Users).filter(~Users.groups.any())
否则,使用outerjoin
和where
,非常直接,生成类似于一对一查询的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/