我有一个多对多的模型,比如众所周知的用户和组:
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)
暂无答案!
目前还没有任何答案,快来回答吧!