首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mysql sqlalchemy关键词搜索

mysql sqlalchemy关键词搜索
EN

Stack Overflow用户
提问于 2015-09-07 12:04:54
回答 1查看 130关注 0票数 1

我有带有关键字的数组:

代码语言:javascript
运行
复制
keywords = ["word1","word2","word3"]

我有一张桌子上的物品:

项目:

  • id
  • 标题
  • 日期

我要找到在标题字段中有标题的任何记录。

因此,我想在like("%{word}%".format(word=word))和"OR“之间混用

请注意,还有其他字段,所以我不能简单地在所有字段之间创建或介于它们之间,我希望这是一个与其他条件相同的字段,但无法确定如何将它们标记为一组or,但与其他字段一起使用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-07 13:46:41

在我的示例中,我假设您的模型定义如下:

代码语言:javascript
运行
复制
class Item(Base):
    id = Column(Integer, primary_key=True)
    title = Column(String)
    date = Column(Date)

要为关键字生成OR条件,可以使用or_()

代码语言:javascript
运行
复制
>>> keywords = ['word1', 'word2', 'word3']
>>> keywords_condition = or_(*[Item.title.like('%{}%'.format(keyword)) for keyword in keywords])
>>> keywords_condition
'item.title LIKE :title_1 OR item.title LIKE :title_2 OR item.title LIKE :title_3'

然后您可以使用filter()方法来应用这个条件+任何数量的其他条件。他们将加入AND

代码语言:javascript
运行
复制
>>> Session.query(Item).filter(keywords_condition, Item.date == date.today())
'SELECT item.id AS item_id, item.title AS item_title, item.date AS item_date 
FROM item 
WHERE (item.title LIKE :title_1 OR item.title LIKE :title_2 OR item.title LIKE :title_3) AND item.date = :date_1'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32438317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档