好的,经过大量研究,我意识到正是我自己对SQL术语的无知使我退缩。我寻找一种找到属于组列表“至少一个”的用户的解决方案的搜索应该是找到属于组列表中“任何”的用户。
anySQLAlchemy的ORM函数完全满足我的需求,例如:
session.query(ZKUser).filter(ZKUser.groups.any(ZKGroup.id.in_([1,2,3])))
该代码发出此SQL(在MySQL 5.1上):
SELECt * FROM users WHERe EXISTS ( SELECt 1 FROM user_groups, groups WHERe users.id = user_groups.contact_id AND groups.id = user_groups.group_id AND groups.id IN (%s, %s, %s) )