Изменение конфигурационных переменных приложения Flask во время выполнения приложения?

#python #sql #apache #flask

Вопрос:

Итак, у меня запущено приложение flask, и вот как выглядит файл конфигурации:

 class config(object):
    SECRET_KEY = 'india'

class configTest(config):
   MYSQL_HOST = 'host1'
    MYSQL_PORT = 3306
    MYSQL_USER = 'admin'
    MYSQL_PASSWORD = 'yangmai'
    MYSQL_DB = 'ide'

class configProd(config):
    MYSQL_HOST = 'host2'
    MYSQL_PORT = 3306
    MYSQL_USER = 'admin'
    MYSQL_PASSWORD = 'yangmai'
    MYSQL_DB = 'ide'
 

В моем init.py, Я делаю это:

 app.config.from_object('project.config.configTest')
 

Работает хорошо. Теперь я хочу предоставить пользователю возможность переключать базу данных во время входа в систему. Таким образом, по сути, класс конфигурации должен измениться с configTest на configProd или наоборот по выбору пользователя.

Идея состоит в том, чтобы предоставить пользователю возможность доступа к тестовым и производственным средам без развертывания двух отдельных приложений. Есть какие-нибудь решения? Кроме того, приложение работает под управлением apache.

Комментарии:

1. Вы используете SQLAlchemy или Flask-SQLAlchemy ? Затем подключение к БД выполняется при запуске приложения. Если, с другой стороны, вы сами обрабатываете соединение, то проблем нет, на самом деле у вас могут быть открыты два соединения одновременно.

2. Я использую Flask-Mysqldb. Как мне определить два соединения в моей конфигурации, а затем использовать их в соответствии с конкретным случаем? Не могли бы вы, пожалуйста, поделиться некоторыми намеками на этот счет?

3. По — видимому, с помощью этого пакета можно обрабатывать несколько подключений-см.: Flask-MySQL . И если обе базы данных находятся на одном хосте, и у пользователя есть права доступа к ним обоим, вы можете добавить в таблицы имя базы данных.

4. Меня беспокоит, есть ли способ изменить класс конфигурации в init.py после запуска приложения? Обе базы данных идентичны по структуре, единственное различие заключается в данных. Я хочу избавить себя от необходимости использовать операторы if для двух запросов на подключение.