2011-07-14 4 views
2

SQLAlchemyでクエリを実行するのに必要なキーストロークの数が多いことを考えると助かります。declaritive_baseクラスのメソッドを使用してSQLAlchemyクエリオブジェクトを取得する

DBSession.query(User).filter(...).first() 

何か問題がありますか?

DBSession = scoped_session(sessionmaker()) 

class BaseWithDBSession(object): 
    def delete(self): 
     DBSession.delete(self) 

    @classmethod 
    def query(cls): 
     return DBSession.query(cls) 


Base = declarative_base(cls=BaseWithDBSession) 

class User(Base): 
    __tablename__ = 'users' 
    id = Column(Integer, primary_key=True) 
    ... 

user = User.query().filter(User.id==1).one() 
user.delete() 

このアプローチは、私にすっきりたくさんいるようだ、それはまた、私はコードファイル間のDBSessionをインポートする必要がないことを意味します。欠点は、すべてのクラスが特定のセッションに縛られていることです。しかし、私は何か違うことを望む状況は考えられません。私は前に(私の経験不足を除いて)このアプローチを見ていない理由を考えようとしています...

答えて

1

まあ、この種のことをする方法はたくさんあります.Myke Bayerのtongue-頬の投稿は約Magic, a "new" ORMです。 SQLAlchemyは、フレームワークではなくツールキットとして機能するので、さまざまなシナリオのニーズに応じてさまざまな方法で使用できます。たとえば、単一のセッションでは不十分であるシナリオがあります。

SQLAlchemyの上にサードパーティの宣言層があります。 Elixir。物事をやり遂げる方法が少しずつ異なります。

+0

マイクバイヤーの引用文「SQLAlchemyはフレームワークではありません...それはツールキットです」では概念的な問題をまとめているようですが、Elixirは上記のとおりです。ありがとう。 – mattjbray

関連する問題