2015-09-07 86 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'