社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

测试中的Django外部MySQL DB连接投诉“未知数据库”

James Lin • 5 年前 • 1182 次点击  

在我的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. 这个 default other_1 两者都是 postgres 后端和 other_2 mysql 后端。
  2. 我补充说 "TEST": {"MIRROR": default} 以避免在测试期间创建这些数据库。看到这个 link .

问题:

当我运行测试时,它会抱怨 Unknown database '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'")

如果我把 其他2 连接,测试运行正常。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43743
 
1182 次点击  
文章 [ 1 ]  |  最新文章 5 年前
James Lin
Reply   •   1 楼
James Lin    6 年前

看起来问题是因为有后台?

我深入调查了 setup_database code ,如果我删除 other_2 mirrored_aliases dict,那么我的测试代码就可以正常工作了。

所以我创建了一个测试运行程序类来删除 其他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)