【问题标题】:Connection to the another DB not created by Django连接到不是由 Django 创建的另一个数据库
【发布时间】:2022-01-24 01:56:24
【问题描述】:

我有Django 项目并想查看另一个数据库(不是Php Symfony 创建的默认数据库)

Django可以在settins.py中设置两个DB

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数据库

我只想引用外部数据库而不是改变。

有什么好的做法吗??

【问题讨论】:

    标签: python django


    【解决方案1】:

    您可能正在寻找模型上的managed = false 元设置。这将导致 Django 不尝试管理这些模型(例如为它们创建迁移)。它通常在处理外部管理的数据库时使用。

    EG:

    class Area(models.Model):
        class Meta:
            db_table = 'my_area'
            managed = false
    

    【讨论】:

      【解决方案2】:

      您可能希望使用生成模型

      python manage.py inspectdb --database=extern > models.py
      

      这将生成与数据库中的表对应的模型

      查看this link 了解有关遗留数据库的更多详细信息(django 文档)

      【讨论】:

        【解决方案3】:

        我认为你需要做的是运行

        python manage.py migrate --database extern
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-03
          • 1970-01-01
          • 2017-01-16
          • 2010-09-06
          • 2013-01-19
          • 2015-02-27
          • 1970-01-01
          相关资源
          最近更新 更多