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

Omi*_*nus 5 python oop sqlalchemy

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

results = Customer.search(query)
Run Code Online (Sandbox Code Playgroud)

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

@classmethod
def search(cls,query):
    #do some stuff
    return results
Run Code Online (Sandbox Code Playgroud)

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

DBSession.query(Customer).filter(...)
cls.query(Customer).filter(...)
Run Code Online (Sandbox Code Playgroud)

小智 9

使用

cls.query
Run Code Online (Sandbox Code Playgroud)

你必须为query_property你的模型类指定一个!

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

Base.query = Session.query_property()
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地写:

cls.query.filter(...)
Run Code Online (Sandbox Code Playgroud)

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


cco*_*ley 6

我刚刚写了一些类似的代码,遵循这个参考.

class Users(Base):
    __tablename__ = 'users'

    @classmethod
    def by_id(cls, userid):
        return Session.query(Users).filter(Users.id==userid).first()
Run Code Online (Sandbox Code Playgroud)

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

  • 链接无效 (2认同)