2016-09-23 2 views
1

Ich schreibe eine Web-App, wo Datenbankabfrage kommt aus zwei Auswahlfelder, eine ist über sex und die andere ist über class_type. In meinem Code, ich habe eine Basisabfrage haben, die das folgende Formular sein allbessere Möglichkeit zum Schreiben von Abfragen mit 2 Auswahlkriterien

q = User.query.with_entities(*(getattr(User, col) for col in cols))  

Und je nachdem, ob sex und class_type sind so gewählt hat, breche ich die Fälle als

if sex=='all' and class_type=='all': 
    rows = q.all() 
elif sex=='all' and class_type!='all': 
    rows = q.filter_by(class_type=class_type) 
elif sex!='all' and class_type=='all': 
    rows = q.filter_by(sex=sex) 
else: 
    rows = q.filter_by(sex=sex, class_type=class_type) 

Gibt es eine folgt bessere Möglichkeit, diese Logik zu schreiben?

Antwort

1

Sie können dies tun:

filters = {} 
if sex != 'all': 
    filters['sex'] = sex 
if class_type != 'all': 
    filters['class_type'] = class_type 
rows = q.filter_by(**filters) 

Sie würden brauchen nur eine Bedingung pro Attribut, und ein leeres Wörterbuch für filters würde ohne WHERE Klausel in einer Abfrage führen.

Verwandte Themen