mysql - 测试中的 Django 外部 mysql 数据库连接提示 "unknown database"

标签 mysql django django-unittest

在我的 django 项目中,我有一些数据库连接:

例如。

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql_psycopg2",
        "NAME": "awesome",
        ...
    },
    "other_1": {
        "ENGINE": "django.db.backends.postgresql_psycopg2",
        "NAME": "other_1",
        "TEST": {"MIRROR": default}
        ...
    },
    "other_2": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "other_2",
        "TEST": {"MIRROR": default}
    }
}

注意:

  1. defaultother_1 都是 postgres 后端,并且 other_2mysql 后端。
  2. 我将 "TEST": {"MIRROR": default} 添加到额外的数据库配置中,以避免在测试期间创建这些数据库。看这个link .

问题:

当我运行测试时,它提示未知数据库“test_awesome”,堆栈跟踪显示它来自 MYSQL 后端:

Traceback (most recent call last):
  File "/Users/jlin/virtualenvs/awesome-1SH6mAZ2/lib/python3.6/site-packages/django/test/testcases.py", line 1005, in setUpClass
    if not connections_support_transactions():
  File "/Users/jlin/virtualenvs/awesome-1SH6mAZ2/lib/python3.6/site-packages/django/test/testcases.py", line 970, in connections_support_transactions
...
File "/Users/jlin/virtualenvs/awesome-1SH6mAZ2/lib/python3.6/site-packages/MySQLdb/__init__.py", line 85, in Connect
    return Connection(*args, **kwargs)
  File "/Users/jlin/virtualenvs/awesome-1SH6mAZ2/lib/python3.6/site-packages/MySQLdb/connections.py", line 204, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
django.db.utils.OperationalError: (1049, "Unknown database 'test_awesome'")

如果我注释掉 other_2 连接,则测试运行正常。

最佳答案

看起来问题是由于后端造成的?

我深入研究了setup_database code ,如果我删除 mirrored_aliases 字典中的 other_2 ,那么我的测试代码可以正常工作。

因此,我创建了一个测试运行程序类来删除 other_2 连接,因为它在代码中太深,无法从 mirriored_aliases 中删除。

class TestRunner(DiscoverRunner):
    def setup_databases(self, **kwargs):
        # to get around this problem
        # https://stackoverflow.com/questions/54189925/django-external-mysql-db-connection-in-test-complains-unknown-database
        settings.DATABASES.pop('other_2', None)
        return super(TestRunner, self).setup_databases(**kwargs)

关于mysql - 测试中的 Django 外部 mysql 数据库连接提示 "unknown database",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54189925/

相关文章:

python - 如何使用 Django Rest Framework 对序列化字段进行排序

python - 在一个 Django 应用程序中模拟装饰器

Python Django 测试两个异常之一

python - Django 单元测试卡住了 E

mysql - 一次导出和导入所有 MySQL 数据库

MYSQL命令启动错误

mySQL 复合主键,部分键自增

mysql - Flutter/Dart 只提取日期和时间?

python - 计算 CSV 中有多少列?

python - 如何解决错误 "object_permission() takes 3 positional arguments but 4 were given"?