SQLAlchemy中的表缺少FROMclause条目

2024-10-03 04:27:45 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的查询生成器方法:

def query_builder(search_parameter):
    query = BusinessOwner.query
    # query = query.select_from(BusinessOwnerTask)
    query = query.join(services, BusinessOwnerTask.services_id == services.c.id). \
        join(BusinessOwnerTask, BusinessOwnerTask.business_owner_id == BusinessOwner.id)
    query = query.filter(services.c.service_grade_id == search_parameter.service_grade)
    if len(search_parameter.name) > 0:
        query = query.filter(BusinessOwner.name == search_parameter.name)
    if len(search_parameter.service_types) > 0:
        query = query.filter(BusinessOwnerTask.services_id.in_(search_parameter.service_types))

    return query

但是,当查询.all()打电话,它在postgres上抱怨

ProgrammingError: (psycopg2.ProgrammingError) missing FROM-clause entry for table "business_owner_tasks" LINE 2: FROM business_owners JOIN services ON business_owner_tasks.s...

我决定加上这个:

^{pr2}$

它抱怨说:

ProgrammingError: (psycopg2.ProgrammingError) table name "business_owner_tasks" specified more than once

我的错误是什么?在


Tags: nameidsearchparameterservicebusinessfilterquery
1条回答
网友
1楼 · 发布于 2024-10-03 04:27:45

我将查询生成器更改为:

query = db.session.query(BusinessOwnerTask, BusinessOwner, services) \
            .join(services, BusinessOwnerTask.services_id == services.c.id) \
            .join(BusinessOwner, BusinessOwner.id == BusinessOwnerTask.business_owner_id) \
            .filter(services.c.service_grade_id == search_parameter.service_grade)

        if len(search_parameter.name) > 0:
            query = query.filter(BusinessOwner.name == search_parameter.name)
        if len(search_parameter.service_types) > 0:
            query = query.filter(services.c.service_type_id.in_(search_parameter.service_types))

提示

最好先在pgAdmin或其他工具上对纯sql进行查询。然后在ORM工具上进行查询

相关问题 更多 >