2015-09-07 87 views
1

我有数组关键字:MySQL的sqlalchmey关键字搜索

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

和我有一个项目表:
项目:
- ID
- 标题
- 最新

我想找到标题字段中有标题的任何记录
所以我要等之间的混合(“%{字}%”。格式(字=字)) 和“OR”
注意有其他领域,所以我不能简单地做或全部之间我想这是和与其他条件,但无法弄清楚如何将它们标记为一组OR但是并与其他

感谢,

+0

[在SQLAlchemy中使用OR]的可能重复(http://stackoverflow.com/questions/7942547/using-or-in-sqlalchemy) –

回答

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'