使用sqlalchemy会话的Celery子任务会引发UnboundExecutionError

时间:2018-03-06 15:04:54

标签: python sqlalchemy celery

我有芹菜任务,触发了一些子任务。它运行那些非同步的子任务。

count

由于某些原因,当子任务@shared_task def task_update_all_customers(customer_ids=()): job = group( task_update_customer.subtask((cust_id, )) for cust_id in customer_ids ) result = job.apply() all_completed = result.ready() return all_completed @shared_task def task_update_customer(customer_id): with session_scope() as session: num = ( session.query(SomeModel) .filter(SomeModel.customer_id == customer_id) .statement.with_only_columns([func.count()]).order_by(None).scalar() ) print(num) 执行时,它会在sqlalchemy查询中引发:

  

UnboundExecutionError`:此AnnotatedSelect对象不是直接的   绑定到Connection或Engine.Use的.execute()方法   连接或引擎来执行此构造。

但是我正在使用def task_update_customer,而且我还对“task_update_customer”进行了完整的集成测试,该测试按预期工作。

以下session_scope实施:https://pastebin.com/p7DRvkFs

为什么会这样?

1 个答案:

答案 0 :(得分:0)

将我的查询更改为“修复”

    num = (
        session.query(SomeModel)
        .filter(SomeModel.customer_id == customer_id)
        .count()
    )