2016-05-03 4 views
0

を投げ、私はちょうどピーウィーORMフレームワークでの作業を開始し、私には少し奇妙に思える行動のいくつかの種類が発生しました:ピーウィー:デフォルト値でModel.getを使用しての代わりに、例外

は、私が本当にしなければなりませんのtry/except-clause内に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?' 

最初の5行のコードのショートカットはありますか?

答えて

1

私は2行にそれを軽減することができましたが、私はそれが近道であることはよく分かりません。ピーウィードキュメントから

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

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 
関連する問題