在sqlalchemy中,是否可以在关系的子查询加载返回的中筛选结果?请考虑以下问题(请忽略任何语法/api错误)
关系:
User.address = relationship(Address,
secondary = UserAddress,
primaryjoin = (User.userid == UserAddress.userid),
secondaryjoin = (UserAddress.addressid == Address.addressid))
查询:
session.query(User).options(subqueryload(User.addresses))
这将为我提供与联接条件匹配的所有地址。但是,如果我想进一步过滤地址呢。例如,如果用户以来宾身份登录,他/她应该只看到另一个用户的公司地址,而不应该看到他的/她的家庭地址。所以类似于(假设):
if user_group == 'guest':
option = subqueryload(User.addresses).filter(Address.type != 'home')
else:
option = subqueryload(User.addresses)
q = session.query(User).options(options)
这不能在primaryjoin或secondaryjoin中表示为条件。在这种情况下我该怎么办?
谢谢,
最佳答案
你想要地址,对吧?只需从另一端执行一个简单的查询(user_id
是一个参数):
qry = session.query(Address).join(User).filter(User.id == user_id)
if user_group == 'guest':
qry = qry.filter(Address.type != 'home')
addresses = qry.all()