0
我正在爲公司及其子公司的數據庫實施一些搜索功能。對於每個公司可能有多個子公司或沒有。每個子公司都有一個company_id列,將其鏈接到母公司表的id列。SQLAlchemy查詢可能不存在一行
這裏是一個名稱如何爲公司尋找一個例子:
def search_by_company_name(name):
company_search = session.query(Company.name).filter(Company.name.like('%{}%'.format(name)))
return company_search.all()
我要的是能夠通過搜索,不僅它的名字來查詢的公司,但任何附屬公司還名稱是可能會分享類似的名字。我現在所擁有的是:
def search_by_company_and_subsidiary_name(name):
company_search = session.query(Company.name).filter(Company.name.like('%{}%'.format(name)) | Subsidiary.name.like('%{}%'.format(name)))
search_results = company_search.filter(Company.id == Subsidiary.company_id)
return search_results.all()
與我的方法的問題是,如果有一定的母公司沒有子公司,則該查詢返回任何內容,即使名稱搜索的公司行匹配表。
例如:
search_by_company_name('accenture')
>>> [('Accenture',)]
然而
search_by_company_and_subsidiary_name('accenture')
>>> []
我敢肯定的是,第二個函數返回[]因爲有埃森哲子公司沒有在我的數據庫,所以謂語.filter(Subsidiary.company_id == Company.id)
是基本上消除了公司表中已經找到的任何結果。我在想這個解決方案可能是做一個左連接的事情,但是我經過一段時間的排解後還沒有運氣。
是否有一種很好的方法在SQLAlchemy中執行這樣的查詢,當某個給定的公司的輔助表中沒有匹配的行時,仍然會返回在某個表中找到的所有行?
經過多一點挖掘,這其實是我最終做的,謝謝你的答案! –
很好讀Zach。希望你能接受答案。 :) – TheArchitect