mysql sqlalchemy关键字搜索

时间:2015-09-07 12:04:54

标签: python mysql sqlalchemy

我有关键字的数组:

keywords = ["word1","word2","word3"]

我有物品清单:
项目:
- id
- 标题
- 日期

我想在标题字段中找到任何标题的记录
所以我想混合之间的喜欢(“%{word}%”。格式(word = word)) 和“或”
请注意,还有其他字段,所以我不能简单地制作或介于所有字段之间我希望这与其他条件成为AND但无法弄清楚如何将它们标记为一组OR但与其他人一起

1 个答案:

答案 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'