Apr 12, 2017 18:35
Недавно пришлось озадачиться следующим вопросом - доступом к базе
данных (postgres) для слива оттуда определённого рода интересных
данных. В сущности, это решается одним sql-запросом, но с каких пор мы
ищем лёгкие пути?
Поэтому было решено использовать уже имеющиеся orm-модели.
Проблема заключалась в следующем. Эти модели были получены класса
SQLAlchemy пакета flask.ext.sqlalchemy, и потому имела место быть
зависимость от flask. А объективно говоря, для подключения к БД и
выполнения на нём запросов запуск веб-сервера не требуется.
Пожалуй, единственное что требовалось от фласка - его конфигурация,
содержащая необходимые сведения для собственно подключения к БД.
Путём проб и ошибок, а также чтения кода был получен минимально
необходимый объект, изображающий из себя сервер flask
class FakeApp(object):
from flask.config import Config
config = Config('.', {})
extensions = {}
debug = True
import_name = 'fake'
@staticmethod
def teardown_request(func):
return func
Инициализация его производится с помощью занесения в него конфигурации
методом Config.from_object(), а связь с БД - вызовом на объекте
SQLAlchemy его метода init_app, после чего фальшивый объект
заносится в поле app экземпляра SQLAlchemy.
Можно только предположить что в нормальных условиях эту регистрацию
проводит сам веб-сервер, проверив подключенные к нему расширения
(одним из которых является и flask.ext.SQLAlchemy).
python,
чёрная магия