You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Python查询函数以支持多列参数的关键词匹配?

多列关键词匹配的SQLAlchemy查询优化方案

现有模型类

class Companies(Base):
    __tablename__ = 'companies'

    ticker = Column(String, primary_key=True)
    name = Column(String)
    sector = Column(String)

class Financial(Base):
    __tablename__ = 'financial'
    
    ticker = Column(String, primary_key=True)
    ebitda = Column(Float)
    sales = Column(Float)
    net_profit = Column(Float)
    market_price = Column(Float)
    net_debt = Column(Float)
    assets = Column(Float)
    equity = Column(Float)
    cash_equivalents = Column(Float)
    liabilities = Column(Float)

原函数局限

原search_data仅支持单列匹配,且在Python端做数据过滤,效率低下,仅能返回单个字段值:

def search_data(a, b):
    
    loaded = [ii for i in session.query(a) for ii in i if b in ii.lower()]
    print(loaded)
    if len(loaded) > 0:
        [print(*i) for i in enumerate(loaded)]
        return loaded
    else:
        print("Company not found!")

优化后的多列查询实现

from sqlalchemy import or_

def search_data(columns, keyword):
    # 构建多列模糊匹配条件:任意一列包含关键词(忽略大小写)
    match_conditions = or_(*[col.ilike(f"%{keyword.lower()}%") for col in columns])
    # 查询匹配的完整Companies对象(需关联Financial可按需添加join逻辑)
    matched_companies = session.query(Companies).filter(match_conditions).all()
    
    if matched_companies:
        for idx, company in enumerate(matched_companies):
            print(f"{idx}: 股票代码={company.ticker}, 公司名称={company.name}, 所属行业={company.sector}")
        return matched_companies
    else:
        print("未找到匹配的公司!")
        return []

优化核心点

  • 数据库端过滤:用ilike和or_把匹配逻辑交给数据库处理,比Python端遍历全量数据效率提升明显,数据量越大优势越突出。
  • 多列灵活匹配:参数columns接受列对象列表(如[Companies.name, Companies.ticker]),可任意组合需要匹配的字段。
  • 返回完整实例:不再返回单一字段值,而是返回完整的Companies对象,方便后续获取关联属性或关联的Financial数据。
  • 大小写不敏感:统一将关键词转小写后用ilike匹配,避免大小写导致的漏匹配。
  • 易读输出格式:打印结果时展示完整的公司信息,比原函数输出更直观。

使用示例

# 按公司名称和股票代码匹配关键词
search_data([Companies.name, Companies.ticker], "科技")

内容的提问来源于stack exchange,提问作者Breathe of fate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 17:50:29