2017-02-25 106 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查询。