2016-05-03 5 views
0

Ich habe gerade angefangen mit dem peewee ORM-Framework arbeiten und eine Art von Verhalten begegnet, die mir ein wenig seltsam scheint:peewee: Model.get mit einem Standardwert verwenden, anstatt eine Ausnahme zu werfen

Sie wirklich ich habe Verwenden Sie Model.get innerhalb einer Try/Except-Klausel, um einen Standardwert für meine Abfrage zu erhalten?

user = None 
try: 
    user = User.get(User.phone_number == phone_number) 
except User.DoesNotExist: 
    pass 

if user: 
    print u'Hello, {}!'.format(user.first_name) 
else: 
    print u'Who are you?' 

Gibt es eine Abkürzung für die ersten fünf Zeilen Code?

Antwort

1

Ich konnte es auf 2 Zeilen reduzieren, aber ich bin mir nicht sicher, dass es eine Abkürzung ist.

results = User.select().where(User.name=="Yellow").limit(1) 
user = user if len(results) > 0 else None 

Von Peewee Dokumentation:

Die Methode get() ist eine Abkürzung mit einer Grenze von 1 zur Auswahl einer Ausnahme Es hat das zusätzliche Verhalten erhöhen, wenn keine passende Zeile gefunden wird. Wenn mehr als eine Zeile gefunden wird, wird die vom Datenbank-Cursor zurückgegebene erste Zeile verwendet.


weiter zu vereinfachen, würde ich empfehlen, die Zeile oben in eine generische Funktion wickeln.

def get_without_failing(Model, query): 
    results = Model.select().where(query).limit(1) 
    return results[0] if len(results) > 0 else None 

print(get_without_failing(User, (User.name=='Red')).name) 
print(get_without_failing(User, (User.name=='Yellow'))) 

Ausgabe

Red 
None 
Verwandte Themen