2016-05-03 2 views
0

я только начал работать с Peewee рамках ОРМ и столкнулся с какой-то поведение, которое кажется немного странным:PeeWee: используя Model.get со значением по умолчанию, вместо того, чтобы бросать исключение

ли я на самом деле должны используйте Model.get внутри try/except-clause, чтобы получить значение по умолчанию для моего запроса?

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?' 

Есть ли ярлык для первых пяти строк кода?

ответ

1

Мне удалось уменьшить его до 2 строк, но я не уверен, что это ярлык.

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

От Peewee документации:

Метод Get() является сокращением для выбора с пределом 1. Она не имеет дополнительное поведение поднимая исключение, когда найдена не соответствующей строки. Если найдено несколько строк, будет использоваться первая строка, возвращаемая курсором базы данных.


Для дальнейшего упрощения, я бы рекомендовал оберточную линию выше в более обобщенной функции.

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'))) 

Выход

Red 
None 
Смежные вопросы