SQLAlchemy中是否有类似于Django管理器的东西?

7 投票
2 回答
2690 浏览
提问于 2025-04-16 11:02

我有一些SQLAlchemy模型(声明式)和一些查询需要写,比如:

Mymodel.query.filter(Mymodel.myfield=='lambda')

因为我在代码中需要多次使用上面的查询,所以我想找个更好的方法,而不是一次又一次地重复它。我知道在django中,可以通过在模型中放置管理器来实现这个功能。

在SQLAlchemy中有没有类似于django的管理器的东西?或者有没有其他的方法可以做到这一点?

2 个回答

1

我最终做的是创建管理类。我只在SA对象上实现实例方法,而把获取或生成模型实例列表等查询的功能放在Mgr类里。

class MyModelMgr(object):
    @staticmethod
    def get_something(param):
        return MyModel.query.filter(MyModel.somefield==param).all()

class MyModel(Base):
    ........
11

对于常见的查询,我会在一个映射的(ORM)类中添加一个类方法。
举个例子:

class User(object):

    @classmethod
    def get_by_username(cls, dbsession, username):
        return dbsession.query(cls).filter(cls.username==username).one()

这个映射的类基本上就是管理者。

撰写回答