sqlalchemy在桌面上搜索函数作为classmethod?

时间:2012-01-19 21:51:34

标签: python oop sqlalchemy

假设我有一个名为Customer的类,它在sqlalchemy中定义以表示customer表。我想写一个搜索方法,以便......

results = Customer.search(query)

将根据方法返回结果。我想以@classmethod做到这一点吗?

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

我可以使用cls代替DBSession.query吗?

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

2 个答案:

答案 0 :(得分:9)

使用

cls.query

您必须为模型类指定query_property

您可能也希望在其他模型类中使用它,因此您可能希望在model/__init__.py中的某个模型Base类中执行此操作:

Base.query = Session.query_property()

然后你可以简单地写:

cls.query.filter(...)

请注意,您不再指定要查询的对象,这是使用query_property机制自动完成的。

答案 1 :(得分:6)

我刚刚在this reference之后写了一些类似的代码。

class Users(Base):
    __tablename__ = 'users'

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

所以第一个问题的答案似乎是“是”。不确定第二个,因为我没有用cl替代DBSession。