python—如何在sqlalchemy中高效地查询所有组,并检查已知用户是否属于每个组

qmb5sa22  于 2021-08-13  发布在  Java
关注(0)|答案(0)|浏览(214)

我有一个多对多的模型,比如众所周知的用户和组:

users_groups_table= Table('users_in_groups', Base.metadata,
    Column('group_id', Integer(), ForeignKey('group.id'), primary_key=True),
    Column('user_id', Integer(), ForeignKey('user.id'), primary_key=True)

class User(Base):
    __tablename__ = 'user'
    id = Column(Integer(), primary_key=True)
    groups = relationship("Group", secondary=users_groups_table, backref="members")

class Group(Base):
    __tablename__ = 'group'
    id = Column(Integer(), primary_key=True)

所以最终,我要查询其中一个,并希望指出另一个的已知示例何时出现在关系中。
我可以这样做:

user = session.query(User).get(known_user_id)

groups = session.query(Group).all()
for g in groups:
    if user in g.members:
        # ...

不过,我觉得这样做最终会对每个组进行查询,得到一个用户列表,这可能是一个巨大的列表,并在其中进行测试,当一开始就知道足够的信息时,我认为整个事情可以更有效地形成。
我想我可以查询用户所属的组一次,然后测试每个组是否在该集中。这是最好的解决办法吗?如果有大量的组,而我只在查询中的一个子集上分页,会怎么样?
我只是觉得我缺少了一种更好的方法来构造初始查询,以便准确地获得所需的数据,而不会在每个项的列表测试中产生pythonic成员。

例如:

假设我有一个复杂的查询,并返回ID为[100500999]的组。假设用户是500的成员,从1000到10000000。我想找回像这样的东西:

(group<id 1>, false)
(group<id 500>, true)
(group<id 999, false)

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题