Подключение к другой БД, не созданной Django
У меня есть проект Django и я хочу посмотреть другую базу данных (не базу по умолчанию, созданную Php Symfony)
Django может установить две БД в settins.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
"NAME": config("DB_NAME"),
"USER": config("DB_USER"),
"PASSWORD": config("DB_PASSWORD"),
"HOST": config("DB_HOST"),
"PORT": config("DB_PORT"),
'OPTIONS': {
'charset': 'utf8mb4',
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"
},
}
'extern': {
'ENGINE': 'django.db.backends.mysql',
'NAME': config("DB_EXTERN_NAME"),
'USER': config("DB_EXTERN_USER"),
'PASSWORD': config("DB_EXTERN_PASSWORD"),
'HOST': config("DB_EXTERN_HOST"),
'PORT': config("DB_EXTERN_PORT"),
}
}
и установить models.py, например
class Area(models.Model):
class Meta:
db_table = 'my_area'
Однако это требует изменения внешней базы данных, когда python manage.py makemigrations, python manage.py migrate
Я просто хочу ссылаться на extern db, а не на alter.
Есть ли положительный опыт?
Я думаю, что вам нужно сделать следующее: выполнить
python manage.py migrate --database extern
Возможно, вы ищете параметр managed = false meta для ваших моделей. Это заставит Django не пытаться управлять этими моделями (например, создавать для них миграции). Это обычно используется при работе с базами данных, управляемыми извне.
EG:
class Area(models.Model):
class Meta:
db_table = 'my_area'
managed = false
Возможно, вы захотите сгенерировать свои модели с помощью
python manage.py inspectdb --database=extern > models.py
Это создаст модели, соответствующие таблицам в вашей базе данных
Посмотрите эту ссылку для получения более подробной информации о старых базах данных (django docs)