Подключение к другой БД, не созданной 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)

Вернуться на верх