Ответ 1
В исходном коде Flask-SQLAlchemy класс db.Model
инициализируется следующим образом:
self.Model = self.make_declarative_base()
И вот метод make_declarative_base()
:
def make_declarative_base(self):
"""Creates the declarative base."""
base = declarative_base(cls=Model, name='Model',
metaclass=_BoundDeclarativeMeta)
base.query = _QueryProperty(self)
return base
Метакласс _BoundDeclarativeMeta
является подклассом SQLAlchemy DeclarativeMeta
, он просто добавляет поддержку для вычисления значения по умолчанию для __table__
(имя таблицы), а также для обработки привязок.
Свойство base.query
позволяет моделям на основе Flask-SQLAlchemy обращаться к объекту запроса как Model.query
вместо SQLAlchemy session.query(Model)
.
Класс запросов _QueryProperty
также подклассифицирован из запроса SQLAlchemy. Подкласс Flask-SQLAlchemy добавляет три дополнительных метода запросов, которые не существуют в SQLAlchemy: get_or_404()
, first_or_404()
и paginate()
.
Я считаю, что это единственные различия.