首页 文章

Sqlalchemy超出了最大递归深度

提问于
浏览
1

我编写了这个循环来动态构建一个使用Sqlalchemy的select语句,试图减少数据库命中 .

调用 query.all() 时,我没有超出最大递归深度错误 .

当我将递归深度max更改为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()

1 回答

  • 2

    目前,您正在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])
    

相关问题