我编写此循环是为了使用 Sqlalchemy 动态构建 select 语句,以尝试减少数据库命中。
我不明白为什么在调用 query.all()
时会出现超出最大递归深度的错误。
当我将递归深度最大值更改为 2000 时,此查询工作正常。
代码:
filter_cond = False
for asset in assets:
filter_cond = or_(filter_cond, and_(model.version == asset.get("version"),
model.id == asset.get("id"),
model.account_id == account_id))
query = session.query(model).filter(filter_cond)
result_set = query.all()
最佳答案
当前您正在 for 循环中递归构建以下嵌套逻辑条件
or(...or(or(false, condition1), condition2), ... conditionN)
相反,如果您表达等效条件:
or(condition1, condition2, ... conditionN)
使用列表理解和解包,可以避免递归。
def condition(model, asset):
return and_(model.version == asset.get("version"),
model.id == asset.get("id"),
model.account_id == account_id)
filter_cond = or_(*[condition(model, asset) for asset in assets])
关于python - Sqlalchemy 超出最大递归深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41625847/