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错误吗?
答案 0 :(得分:1)
在执行任何管理命令之前,Django将as described in this google documentation整个项目。
Django执行的run system checks包括几个数据库检查。在您的情况下,数据库不可用,因此失败。迁移本身将在您选择的数据库上执行,但为了通过检查,Django需要访问其他数据库。
如果该特定数据库在本地不可用,那么通常的方法是使本地设置文件覆盖DATABASES
设置并删除该密钥。