一行可能不存在的SQLAlchemy查询

2024-05-14 00:32:29 发布

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

我正在实现一些公司及其子公司数据库的搜索功能。对于每个公司,可能有多个子公司或无子公司。每个子公司都有一个公司id列,该列将其链接到母公司表的id列。

以下是如何按名称搜索公司的示例:

def search_by_company_name(name):
    company_search = session.query(Company.name).filter(Company.name.like('%{}%'.format(name)))
    return company_search.all()

我想要的是,通过搜索公司的名称,而且可以查询任何可能有类似名称的子公司的名称,从而查询公司。我现在的情况是:

^{pr2}$

我的方法的问题是,如果某个母公司没有子公司,那么查询将不会返回任何内容,即使名称搜索与公司表中的一行匹配。

例如:

^{pr3}$

然而

^{pr4}$

我确信第二个函数返回[]是因为我的数据库中没有Accenture的子函数,所以谓词^{cd1>}基本上删除了公司表中已经找到的任何结果。我想解决办法可能是做一些像左连接这样的事情,但我已经有一段时间没有任何运气了。

在SQLAlchemy中这样做的查询是否有一个好方法,当给定公司的子表中没有匹配的行时,仍然返回在某个表中找到的所有行?


Tags: 方法name功能名称id数据库示例search
1条回答
网友
1楼 · 发布于 2024-05-14 00:32:29

您可以考虑实现outerjoin,而不是严格的筛选条件,例如:

def search_by_company_and_subsidiary_name(name):
    return session.query(Company)
                  .outerjoin(Subsidiary, Company.id == Subsidiary.company_id)
                  .filter(Company.name.like('%{}%'.format(name)) | Subsidiary.name.like('%{}%'.format(name)))
                  .all()

相关问题 更多 >