2017-02-25 61 views
0

我想實現一個搜索functionaltiy的餐廳,目前在我的數據庫中的字段menu_type是一個varchar,值由逗號分裂逗號分隔的JSON

"Burger, Cafe, Italian, American,Irish"

我怎樣才能使分離這樣,當有人對「漢堡」搜索,它會顯示他一切具有漢堡的結果只能作爲menu_type或「漢堡」是他們menu_type的一部分

@app.route('/api/restaurants/search/',methods=['GET']) 
def get_restaurant(): 
    menu = request.json.get('menu') 
    restaurant = Restaurant.query.filter_by(menu_type=menu).all() 
    return jsonify(json_list=[i.serialize for i in restaurant]) 

我的餐廳型號:

class Restaurant(db.Model): 
    __tablename__ ='Restaurant' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(64)) 
    address1 =db.Column(db.String(128)) 
    address2 = db.Column(db.String(32)) 
    phone =db.Column(db.Integer) 
    lat = db.Column(db.Float(precision='12,10')) 
    lng = db.Column(db.Float(precision='12,10')) 
    cost = db.Column(db.Integer) 
    menu_type = db.Column(db.String(64)) 
    rate =db.Column(db.Float(precision='3,2')) 
    offer=db.Column(db.String(128)) 

    @property 
    def serialize(self): 
     """Return object data in easily serializeable format""" 
     return { 
      'id' : self.id, 
      'name': self.name, 
      'address1' : self.address1, 
      'address2': self.address2, 
      'phone' : self.phone, 
      'lat': self.lat, 
      'lng' : self.lng, 
      'cost': self.cost, 
      'menu_type' : self.menu_type, 
      'rate': self.rate, 
      'offer' : self.offer 
      } 
+0

要搜索漢堡,你的SQL查詢將是SELECT * FROM your_table_name WHERE menu_type LIKE%Burger%;但是你可以使用menu_types進行標準化並製作一個表格,並且只保留對主表格的引用。那麼數據庫將能夠使用索引來搜索菜單類型(現在不能) –

+0

嗨!感謝您的建議! – Abdul

+0

Like%search_word%,%很重要,因爲它是任何字符的替代品,但數據庫將無法完全使用索引 –

回答

0

使用過濾如下:

Restaurant = Restaurant.query.filter(Restaurant.menu_type.like('% {0}%').format(menu)).all()

這會給你的結果,因爲你正在做一個like查詢。