私はこのようなコードを持っている:SQLAlchemyクエリをどのように呼び出すことができますか?
thing = thing.query.filter_by(id=thing_id).limit(1).all()[0]
all()[0]
はlimit(1)
場合に少し厄介と冗長感じます。これを達成するために、より簡潔な(および/またはその他の点で最適な)方法がありますか?
私はこのようなコードを持っている:SQLAlchemyクエリをどのように呼び出すことができますか?
thing = thing.query.filter_by(id=thing_id).limit(1).all()[0]
all()[0]
はlimit(1)
場合に少し厄介と冗長感じます。これを達成するために、より簡潔な(および/またはその他の点で最適な)方法がありますか?
Jwodderの答えは、確かに、戻ります最初の結果はスカラーですが、SQLAlchemyはあなたのニーズに合った他の関数をいくつか提供しています。すべてをリストして説明しました。
first()
最初の行が返されます。行が返されない場合はNone
が返されます。
one()
は、1行を引っ張ってくるが、それは一列のみを引く必要があります:あなたのクエリから返される行数が1
one_or_none()
ない場合はそれが出てエラーになり、本質的にone()
を行うが、その代わりにerroringのだろう行が返されない場合は、None
を返します。複数の行が返された場合でもこれはエラーになります。 、すべてのhttp://docs.sqlalchemy.org/en/latest/orm/query.html
first()
があります:
first()
1の制限を適用し、スカラー
したがってとして最初の結果を返します:
thing = thing.query.filter_by(id=thing_id).first()
まず同意し、他の回答をサポートしています。
これらのすべてのドキュメントをここで見つけることができます。
ただし、クエリはprimary key
列のようです。このような場合、このようなクエリを作成する最も簡単な方法は、get()
:
thing = Thing.query.get(thing_id)
ニース!私は実際にこれをやりたがっています: 'Thing.query.with_entities(Thing.foo).filter_by(id = thing_id).limit(1).all()。[0]'、 '.get () ' –
実際には、' get'はオブジェクト自体に対してのみ動作し、プライマリキーに対してのみ動作します。 – van