gpt4 book ai didi

python - sqlalchemy:在子查询上使用过滤器的子查询加载

转载 作者:行者123 更新时间:2023-11-28 19:27:17 28 4
gpt4 key购买 nike

在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()

关于python - sqlalchemy:在子查询上使用过滤器的子查询加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7236464/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com