gpt4 book ai didi

python - SQLAlchemy再次过滤查询

转载 作者:行者123 更新时间:2023-11-29 07:35:46 25 4
gpt4 key购买 nike

我想统计用户在每个类别中的建筑物数量。

我有一个非常像这样的查询:

q = session.query(buildings, category_buildings)\
.join(category_buildings, category_buildings.id == buildings.category)\
.filter(buildings.builder_id == user_id)

for cid in range(1, category_count):
q.filter(category_buildings.id == cid)
buildings_for_cid = q.all()

for 循环中的 q.filter() 没有给我想要的结果,因为它根本不按类别 ID 进行过滤。我该怎么办?

在普通 SQL 中:(AND C.id = INT 将发生在 for 循环中)

SELECT * FROM buildings B
JOIN category_buildings C ON B.category = C.id
WHERE builder_id = 1
AND C.id = 1

最佳答案

当你运行 q.all() 时,你实际上只是在运行第一行查询,最后是 .all(),因为第二个过滤器你应用未存储为 q。

所以基本上你是这样做的:

q = 'abc'
for cid in range(1, 10):
q.upper()
print(q)

您期望 q'ABC' 但它实际上从未被修改。我认为你真正想做的是:

q = session.query(buildings, category_buildings) \
.join(category_buildings, category_buildings.id == buildings.category) \
.filter(buildings.builder_id == user_id)

for cid in range(1, category_count):
branched = q.filter(category_buildings.id == cid)
buildings_for_cid = branched.all()

关于python - SQLAlchemy再次过滤查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48926700/

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