В Django как я могу повлиять на процесс подключения к БД?

#django #python-3.x #django-models

#django #python-3.x #django-модели

Вопрос:

Каков наилучший способ изменить способ django подключения к БД (т. Е. MySQL)?

Например, что мне делать, если мне нужно django подключиться к БД через ssh туннель, настройки которого могут динамически меняться? (Я планирую использовать sshtunnel)

Я понимаю, что я должен sub-class django.db.backends.mysql.base.DatabaseWrapper и, вероятно, super() / изменить get_new_connection(self, conn_params) ? (смотрите пример ниже)

Но тогда как бы я отправил этот пользовательский class в настройках, поскольку кажется, что настройки ожидают путь к модулю, а не к классу?

Что-то среди строк:

 class myDatabaseWrapper(DatabaseWrapper):
    """Oversimplified example."""
    def get_new_connection(self, conn_params):
        with open('path/to/json.js', 'rt') as file: 
            my_conn_params = json.load(file)
        conn_params.update(my_conn_params) 
        return super().get_new_connection(my_conn_params)
  

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

1. Изменение настроек может вызвать у вас проблемы, но я бы начал с рассмотрения этого; github.com/mvx24/django-dbtunnel

2. @markwalker_ Спасибо за предложение. Я не собираюсь изменять settings динамически, а скорее параметры подключения, как показано в отредактированном вопросе. Так что каждый раз, когда необходимо установить (или повторно установить) новые подключения к БД, настройки для этого подключения могут быть обновлены.

3. Возможно, это можно сделать, отправив сигнал всякий раз, когда вы собираетесь подключиться к БД, и установить SSH-соединение в этот момент. Возможно, стоит заглянуть в. docs.djangoproject.com/en/2.2/topics/signals /…