【问题标题】:How to do a general "search bar" search across multiple SQLAlchemy models如何跨多个 SQLAlchemy 模型进行一般的“搜索栏”搜索
【发布时间】:2015-10-31 07:47:28
【问题描述】:

我的应用有一个搜索栏。假设用户搜索了“John Smith United Kingdom Oxford University”,我想用 name“John Smith”、location“United Kingdom”和education“Oxford University”从帐户表中返回用户。

以下是搜索“John Smith United Kingdom Oxford University”的一般概述:

  • 使用name“John Smith”、location“United Kingdom”和education“Oxford University”显示数据库中的帐户。
  • 显示name“John Smith”和education“牛津大学”的帐号
  • 显示name 'John Smith' 和location 'United Kingdom' 的帐户
  • 显示name 'John Smith' 的帐户

我找不到任何专门为 Flask-SQLAlchemy 指定如何执行此操作的资源。我知道我必须使用.like(),尽管我不知道如何将它添加到 Flask 中的 SQLAlchemy 查询中。使用 SQLAlchemy,我可以做到 .where(column.like()),但在 Flask-SQLAlchemy 中我不能。

我该怎么做呢?

【问题讨论】:

  • 那么Smith CollegeGeorgia 的状态,或者一个名为Paul Ireland 的人呢?您的应用程序应该如何知道要使用哪些搜索字符串查询哪些表?您是否要要求用户始终使用确切的格式 N N L L E E 来表示姓名、位置和教育?
  • 这是我的问题的一部分,因为没有像您所说的那样设置搜索格式,我想知道如何实现它。例如 Facebook 和识别姓名、位置和教育/工作的搜索栏。当用户设置帐户时,有一个固定的位置选择,这使事情变得更容易,但nameeducation 不固定,因此用户可以包含任何内容。

标签: python mysql flask sqlalchemy flask-sqlalchemy


【解决方案1】:

最好使用 ilike

User.query.filter(User.name.ilike("%John%")).all()

【讨论】:

    【解决方案2】:

    你使用like()就像你在SQLAlchemy中使用它一样:

    User.query.filter(User.name.like("%John Smith%")).all()
    

    或者你可以使用contains():

    User.query.filter(User.name.contains('John Smith')).all()
    

    【讨论】:

    • 谢谢,这有助于解决问题的第一部分,但我仍然不确定如何选择和排序问题中的用户。
    • @PavSidhu 对于位置,您可以使用包含所有相关国家/地区的预填充下拉列表。对于教育类似的东西(最后可能有其他领域)。
    猜你喜欢
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    相关资源
    最近更新 更多