python - Sqlalchemy 超出最大递归深度

标签 python recursion sqlalchemy

我编写此循环是为了使用 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/

相关文章:

ruby-on-rails - 用于循环第 n 个嵌套深度的递归函数

algorithm - 用交易费买卖股票?

java - 有人可以使用值 (1,1) 追踪我吗

python - 我应该什么时候在 SQLAlchemy 上调用 flush()?

python - matplotlib 可以将元数据添加到保存的图形中吗?

python - 检查目标 : expected dense_2 to have 2 dimensions, 但获得形状为 (1, 1226, 2) 的数组时出错

python - 字符串反转只反转一半的字符串

python - 使用Keras进行图像分类,CNN训练很慢

python - 关闭 SQLAlchemy ORM session 是否会回滚未提交的更改?

python - Flask-SQLAlchemy create_all 如何发现要创建的模型?