2012-01-19 4 views
4

En supposant que j'ai une classe appelée Client définie dans sqlalchemy pour représenter la table client. Je veux écrire une méthode de recherche pour que ...sqlalchemy fonction de recherche sur la table comme classmethod?

results = Customer.search(query) 

retournera les résultats basés sur la méthode. Est-ce que je veux le faire comme @classmethod?

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

Puis-je utiliser cls à la place de DBSession.query?

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

Répondre

4

Je viens d'écrire récemment un code similaire, suivant this reference.

class Users(Base): 
    __tablename__ = 'users' 

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

Donc la réponse à votre première question semble être "oui". Je ne suis pas sûr de la seconde, car je n'ai pas remplacé cls pour DBSession.

7

Pour utiliser

cls.query 

vous devez attribuer un query_property à vos classes de modèle!

Vous voulez probablement l'utiliser dans d'autres classes de modèle aussi bien, de sorte que vous pouvez faire dans votre modèle classe de base quelque part dans votre model/__init__.py:

Base.query = Session.query_property() 

Ensuite, vous pouvez simplement écrire:

cls.query.filter(...) 

Notez que vous ne spécifiez plus l'objet à interroger, ce qui est automatiquement effectué à l'aide du mécanisme query_property.

Questions connexes