Я пытаюсь понять, что является лучшим решением для взаимодействия Django с большим количеством баз данных.
Мне нужно использовать один дБ в качестве бэкэнда для моделей Django, а также мне нужен интерфейс Django приложений с другой устаревшей базой данных, но в этом случае только для чтения данных . Дополнительный контекст: я могу просто подключиться к устаревшей базе данных с пользователем с разрешениями на чтение и запись, но хочу быть уверенным, что устаревшая база данных используется в режиме только для чтения (по крайней мере неявно).
Более того, Мне нужно запросить устаревшую базу данных из многих приложений и представлений, поэтому централизованное управление соединениями было бы оптимальным решением как для управления конфигурацией в одном месте, так и для оптимизации ресурсов (соединений, курсоров и т. Д.)
Сначала я попытался создать объект соединения с библиотекой python и поделиться им между приложениями и представлениями проекта, но понял, что заново изобретаю колесо. Действительно, Django изначально поддерживает больше соединений с базами данных централизованным способом. Например, settings.py
из Django do c:
DATABASES = {
'default': {
'NAME': 'app_data',
'ENGINE': 'django.db.backends.postgresql',
'USER': 'postgres_user',
'PASSWORD': 's3krit'
},
'legacy_db': {
'NAME': 'user_data',
'ENGINE': 'django.db.backends.mysql',
'USER': 'mysql_user',
'PASSWORD': 'priv4te'
}
}
Насколько я понимаю, вторичные базы данных (например, legacy_db
в приведенном выше примере) должны не подвержены никаким операциям записи во время нормального жизненного цикла приложений (например, миграции, взаимодействия ORM и т. д. c ...), если только явные команды или запросы не выполняются с использованием этих вторичных блоков.
Другими словами : если я выполняю только SELECT
запросов к legacy_db
, таких как:
from django.db import connections
cursor = connections['legacy_db'].cursor()
cursor.execute("SELECT * FROM foo")
, нет никакого риска написать что-либо в legacy_db
.
Я открою это, возможно, тривиальное- вопрос, чтобы дважды проверить, верны ли мои предположения, и спросить вас, является ли это способом достижения того, что мне нужно в Django среде.