2017-02-25 5 views
0

Ich versuche, eine Suche functionaltiy für ein Restaurant zu implementieren, die derzeit in der Datenbank der das Feld menu_type ein varchar ist, werden die Werte durch Komma getrenntSplit Komma JSON getrennt

"Burger, Cafe, Italian, American,Irish"

wie kann ich machen es so, dass, wenn jemand sucht nach „Burger“ wird es ihm alle Ergebnisse zeigen, die nur Burger haben als menu_type OR „Burger“ ein Teil ihrer menu_type ist

@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]) 

mein Restaurant Modell:

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

Um nach Burger zu suchen, lautet Ihre SQL-Abfrage SELECT * FROM Ihr_Tabellenname WHERE menu_type LIKE% Burger%; Aber Sie könnten normalisieren und mit menu_types eine Tabelle erstellen und nur einen Verweis darauf in Ihrer Haupttabelle behalten. Dann kann die Datenbank einen Index verwenden, um nach dem Menütyp zu suchen (jetzt geht das nicht) –

+0

Hi! danke für den Vorschlag! – Abdul

+0

Wie% searched_word%,% ist wichtig, weil es ein Ersatz für alle Zeichen ist, aber die Datenbank wird nicht in der Lage sein, einen Index vollständig zu verwenden –

Antwort

0

Verwendung im Anschluss an die zur Filterung:

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

Dies wird Ihnen das Ergebnis, weil Sie eine like Abfrage tun.

Verwandte Themen