2017-01-16 8 views
0

Web APIのFlaskプロジェクトで、宣言的な拡張機能を持つsqlalchemy ORMを使用しています。 Flaskのドキュメントでは、エンドポイント内でクエリを正しく実行する方法を説明しています。here宣言的なORM拡張を伴うFlask SQLの錬金術

これはすべて問題ありませんが、クエリでグループを実行する場合はどうなりますか?例えば、フラスコのドキュメントでユーザーのドメインオブジェクトを与えられた:

class User(Base): 
    __tablename__ = 'users' 
    id = Column(Integer, primary_key=True) 
    name = Column(String(50), unique=True) 
    email = Column(String(120), unique=True) 

私は(意味がない、のためにおもちゃの例として、それを取ると同じ名前を持つすべてのユーザーに対してIDの合計を取得したいですシンプル!)。純粋なSQLでは 私は簡単にそれを行うことができます。エンドポイントの内側しかし

select name, sum(id) from user group by name 

クエリ(もう一度see here)を実行するためのreccomanded方法は、例えば、ドメインオブジェクトのユーザーへの参照から開始することです。

この場合

#see database module http://flask.pocoo.org/docs/0.12/patterns/sqlalchemy/#declarative) 
from database import db_session 

@app.route('/') 
def index(): 
    db_session.query(func.sum(User.id).label('num_id'), User.name).group_by(User.name).all() 

クエリ開始:グループバイ私はむしろ、この(!実際に働く)のようなものを使用するクエリを実行するには

User.query.filter(User.name == 'admin').first() 

db_sessionのsです。 これは正確で安全ですか?私たちはFlaskの中で同時に使用しています。

助けが必要ですか?

答えて

関連する問題