我需要让所有没有引用该组的用户。
在SQL中它就像NOT EXIST
。但是我不知道它是如何在SQLAlchemy的ORM中完成的。
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'))
答案 0 :(得分:2)
使用relationship
s(小而简单的代码,但更详细的SQL
与EXISTS
并且并非真正需要groups
表上的JOIN:
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)
)