2012-01-19 10 views
4

私は顧客テーブルを表すためにsqlalchemyで定義されているCustomerというクラスがあるとします。検索方法を書こうと思っています。テーブルのsqlalchemy検索機能がclassmethodとして機能しますか?

results = Customer.search(query) 

は、メソッドに基づいて結果を返します。 @classメソッドとしてこれをやりたいのですか?

@classmethod 
def search(cls,query): 
    #do some stuff 
    return results 

DBSession.queryの代わりにclsを使用できますか?

DBSession.query(Customer).filter(...) 
cls.query(Customer).filter(...) 

答えて

4

私は最近this referenceを以下、いくつかのようなコードを書きました。

class Users(Base): 
    __tablename__ = 'users' 

    @classmethod 
    def by_id(cls, userid): 
     return Session.query(Users).filter(Users.id==userid).first() 

したがって、最初の質問に対する回答は「はい」です。私はDBSessionの代わりにclsを使用しなかったので、2番目のことについてはわかりません。

7

あなたのモデルクラスにquery_propertyを割り当てる必要があり

cls.query 

を使用するには!

あなたはおそらく、あなたがどこかのモデルの基本クラスでそれを行う場合がありますので、同様に他のモデルクラスでこれを使用したい

あなたmodel/__init__.py

その後
Base.query = Session.query_property() 

あなたは、単に書くことができます。

cls.query.filter(...) 

照会するオブジェクトをもう指定しないでください。これは、query_propertyメカニズムを使用して自動的に行われます。