Найти - Пользователи
Полная версия: Изменение настроек flask-alchemy runtime
Начало » Web » Изменение настроек flask-alchemy runtime
1 2
ale
Здравствуйте!
Подскажите, как реализовать изменение настроек соединение (IP, user …) для flask-alchemy во время выполнения приложения. Пока данная возможность реализуется путем перезагрузки. Может есть решение более удобное решение?
Спасибо!
Lexander
Инициализация session где происходит, при старте приложения или динамически (lazy)?
ale
Сейчас при старте приложения, но вот хотелось реализовать динамический подход. Не подскажите доки по такому варианту?
Lexander
Расскажите что вызывает необходимость изменений настроек в runtime?
Какой use case?

Если runtime, то это, очевидно, не разделение на test, production.
Lexander
И еще, какая сейчас структура приложения и можете ли вы ее менять, если возникнет такая необходимость для выполнения задачи?
ale
Задача следующая. Есть редактор БД+конфигуратор+… и есть несколько (количество и парметры не определены на этапе разработки) серверов БД. Необходимо предоставить возможность подключить интерфейс к любому из серверов. Используется flask-admin+собственные представления. Если возникнет необходимость то можно поменять.
Lexander
Почитайте, начиная с http://docs.sqlalchemy.org/en/latest/orm/session.html#adding-additional-configuration-to-an-existing-sessionmaker

Идея в том, чтобы с помощью Session.configure(bind=engine) выставлять новое соединение.
Для корректной работы объектов внутри сессии, возможно, понадобится сделать session.expire_all() - название пишу по памяти, но смысл, думаю, понятен.

Для проверки и изменения соединения напишите функцию, которая сравнивает свойства соединения и, при необходимости, закрывает старое (с предварительной проверкой активности!), открывает новое.
Потом делает Session.configure(bind=new_engine) и прочие вещи для переинициализации сессии и ее объектов.

Еще есть такой сниппет. И обратите внимание на последний комментарий по ссылке.


Еще можно инициализировать сессию с текущим соединением при начала запроса и убивать ее в конце запроса (см. стандартные события), но в этом случае нагрузка на сервер будет больше.
Этот способ оправдан, если у вас создается новый поток для обработки каждого запроса.
PanovSergey
офф. Я тут понял что нихрена не понимаю в сессии алхимии. Может кто подсксзать где читать. А то я сам найду.
ale
Да я видел эти доки уже, возможно, не внимательно прочитал. Но самое главное в том, что я использую flask-alchemy а не чистую алхимию, будут какие-то ньюансы? В смысле для алхимии все работает, а для фласка - нет.
Lexander
PanovSergey
офф. Я тут понял что нихрена не понимаю в сессии алхимии. Может кто подсксзать где читать. А то я сам найду.
В общем смысле это принцип factory, которым пронизана новая идеология flask вслед за Python 3, начиная с одного из способов устройства архитектуры приложения, заканчивая возможностью динамического подключения расширений.

ale
Но самое главное в том, что я использую flask-alchemy а не чистую алхимию, будут какие-то ньюансы? В смысле для алхимии все работает, а для фласка - нет.
По большому счету, flask-alchemy - это набор так называемых хэлперов для алхимии.
Т.е. теоретически все должно работать, вы уйдете вглубь предлагаемой flask-alchemy абстракции и будете использовать инструменты flask.ext.sqlalchemy.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB