我有关键字的数组:
keywords = ["word1","word2","word3"]
我有物品清单:
的项目:
- id
- 标题
- 日期
我想在标题字段中找到任何标题的记录
所以我想混合之间的喜欢(“%{word}%”。格式(word = word))
和“或”
请注意,还有其他字段,所以我不能简单地制作或介于所有字段之间我希望这与其他条件成为AND但无法弄清楚如何将它们标记为一组OR但与其他人一起
答案 0 :(得分:0)
在我的示例中,我假设您的模型定义如下:
class Item(Base):
id = Column(Integer, primary_key=True)
title = Column(String)
date = Column(Date)
要为关键字构建OR
条件,您可以使用or_()
:
>>> 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
:
>>> 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'