Django迁移尝试连接到非默认数据库

时间:2018-05-13 22:57:15

标签: python mysql django

根据Django documentation

  

migrate management命令一次在一个数据库上运行。默认情况下,它在默认数据库上运行,但通过提供--database选项,您可以告诉它同步另一个数据库。

我的Django应用程序在我的本地开发环境中具有以下数据库配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'mydatabase',
        'USER': 'myuser',
        'PASSWORD': 'mypassword',
        'HOST': 'localhost',
        'PORT': '5432',
    },
    'external_db': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'myexternaldb',
        'USER': 'myexternaluser',
        'PASSWORD': 'myexternalpassword',
        'HOST': '10.10.10.10',
        'PORT': '3306',
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"
        }
    }
}

我只在" external_db"中有一个表。数据库,我将其视为只读(事实上,用户只有读取权限)。当我尝试在默认数据库中迁移表时,出现以下错误:

  

_mysql_exceptions.OperationalError:(2003,"无法连接到MySQL服务器' 10.10.10.10'(10060)")

当文档明确指出默认情况下它只能在默认数据库上运行时,为什么迁移操作会尝试连接到此外部数据库?这是一个Django错误吗?

1 个答案:

答案 0 :(得分:1)

在执行任何管理命令之前,Django将as described in this google documentation整个项目。

Django执行的run system checks包括几个数据库检查。在您的情况下,数据库不可用,因此失败。迁移本身将在您选择的数据库上执行,但为了通过检查,Django需要访问其他数据库。

如果该特定数据库在本地不可用,那么通常的方法是使本地设置文件覆盖DATABASES设置并删除该密钥。