Есть ли что-то эквивалентное менеджерам django в SQLAlchemy? - PullRequest
4 голосов
/ 01 февраля 2011

У меня есть несколько моделей SQLAlchemy (декларативный) и некоторые запросы для записи наподобие:

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

Поскольку мне приходится использовать вышеупомянутый запрос несколько раз в моем коде, я бы хотелсделать лучше, чем повторять это снова и снова.Я знаю, что в django вы можете сделать это, добавив в свои модели manager .

Есть ли что-то эквивалентное менеджерам django в SQLAlchemy?Или, может быть, другой способ сделать это?

Ответы [ 2 ]

9 голосов
/ 02 февраля 2011

Для общих запросов я добавляю метод класса в сопоставленный (ORM) класс. Например:

class User(object):

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

Сопоставленный класс по сути является менеджером.

2 голосов
/ 02 февраля 2011

В итоге я создаю классы менеджера. Я только реализую методы экземпляра на объекте SA и оборачиваю все, что выбирает / генерирует запросы для списков и т. Д. Экземпляров модели в классе Mgr.

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

class MyModel(Base):
    ........
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...