2016-08-28 4 views
0

Ich habe eine große SQLite-Tabelle von 33k Datensätze (Filme). Ich möchte dem Benutzer die Möglichkeit geben, in dieser Tabelle über Filter zu suchen. Jeder Film hat 10 Felder: Schauspieler, Regisseure, Runtime, Genre, Rating und noch einige mehr. Die einzigen Filter, die der Benutzer verwenden kann, sind Personen (einschließlich Schauspieler und Regisseure), Genre, Bewertung und Laufzeit.So erstellen Sie eine dynamische SQL-Abfrage

Das Problem ist, dass der Benutzer zwei Filter oder mehr verwenden kann, daher wissen wir nicht wirklich, welcher Filter verwendet wird. Filterwerte werden über einen HTTP req an den Server übergeben, der sie verarbeitet und eine SQL-Abfrage basierend auf Filtern erstellt, die auf der Datenbank ausgeführt werden.

Was ich nicht verstehen kann ist, wie kann ich eine SQL-Abfrage erstellen, wenn ich nicht weiß, welche Filter verwendet werden? Weil nur benutzte Filter an den Server gesendet werden.

Grundsätzlich möchte ich eine Möglichkeit finden, eine SQL-Abfrage basierend auf gesendeten Filtern von jedem Benutzer zu erstellen.

Antwort

2

Wenn Sie eine Liste von Filtern gegeben sind, können Sie nur Query.filter_by() anwenden oder Query.filter() über und über:

filters = [ 
    ('rating', 3), 
    ('runtime', 90), 
    ('genre', 'documentary') 
] 

query = session.query(Movie) 

for column, value in filters: 
    # Make sure `column` and `value` are legal values! 

    query = query.filter_by(**{column: value}) 

Da die Abfrage erst am Ende ausgewertet wird, sind Sie im Wesentlichen zu tun:

query = query.filter_by(...).filter_by(...) ... 

In der letzten Zeile steht für filter_by(value_of_column_variable=value).

Verwandte Themen