我刚刚开始使用peewee ORM框架并遇到某种对我来说有点奇怪的行为:
我是否真的必须在try / except子句中使用Model.get
来获取查询的默认值?
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?'
前五行代码是否有快捷方式?
答案 0 :(得分:2)
我能够将它减少到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