配置多个数据库时,禁用数据库进行测试

时间:2018-11-08 13:39:37

标签: django

我在应用程序中配置了两个数据库:

DATABASES = {
    'default': { ... }
    'legacy': { ... }
}

旧数据库仅在应用程序的特定部分中使用(为了方便起见,我将其添加为第二个数据库)。

这正常工作,除了当我尝试运行测试时,Django尝试为旧数据库创建测试数据库,从而导致错误:

  

在创建测试数据库时出错:(1044,“拒绝用户...访问数据库'test _...'”)

如何告诉Django不要为第二个旧数据库创建测试数据库?

我认为设置以下内容会起作用:

DATABASES['legacy']['TEST'] = {
    'NAME': None,
    'CREATE_DB': False
}

但这似乎无济于事

1 个答案:

答案 0 :(得分:1)

似乎是多重数据库和Django中测试的常见问题。这是我通常的处理方式。

DATABASES = {
    'default': { ... }
    'legacy': { ... }
}
# You can add here any other type of control (not prod, debug == True, etc.)
if "test" in sys.argv:
    del DATABASES["legacy"]
    # Or
    DATABASES = { "default": DATABASES["default"] }

在只有一个设置文件的情况下,这非常有用,您可以轻松地适应其他情况。

如果要处理许多数据库,另一种选择可能是从头开始在测试设置内进行

DATABASES = {
    'default': { ... }
    'legacy': { ... }
}
# You can add here any other type of control (not prod, debug == True, etc.)
if "test" in sys.argv:
    DATABASES = {"default": {}}
    DATABASES["default"]["ENGINE"] = "django.db.backends.sqlite3"
    # Etc... Add want you need here.