Получение объектов запроса SQLAlchemy с помощью методов класса declaritive_base - PullRequest
3 голосов
/ 14 июля 2011

Не могу не подумать, что число нажатий клавиш, необходимых для выполнения запроса в SQLAlchemy, немного выше.

DBSession.query(User).filter(...).first()

Что-то не так с этим?

DBSession = scoped_session(sessionmaker())

class BaseWithDBSession(object):
    def delete(self):
        DBSession.delete(self)

    @classmethod
    def query(cls):
        return DBSession.query(cls)


Base = declarative_base(cls=BaseWithDBSession)

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    ...

user = User.query().filter(User.id==1).one()
user.delete()

Мне кажется, что этот подход намного удобнее, и это также означает, что мне не нужно импортировать DBSession между файлами кода. Недостатком является то, что все мои занятия связаны с определенной сессией, но я не могу придумать ни одной ситуации, в которой я хотел бы что-то другое. Я пытаюсь придумать причины, почему я не видел такого подхода раньше (кроме моей неопытности) ...

1 Ответ

1 голос
/ 14 июля 2011

Ну, есть много способов сделать что-то подобное - см. Насмешливый пост Майка Бэйера о Magic, "новом" ORM .SQLAlchemy позиционирует себя как набор инструментов, а не как фреймворк, так что его можно использовать по-разному в соответствии с потребностями различных сценариев.Например, будут сценарии, когда одного сеанса недостаточно.

Существуют также сторонние декларативные слои поверх SQLAlchemy - например, Elixir .Он предлагает немного другой способ ведения дел.

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