假设我有一个名为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(...)
答案 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。