簡體   English   中英

測試中的Django外部mysql db連接抱怨“未知數據庫”

[英]Django external mysql db connection in test complains “unknown database”

在我的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} ,以避免在測試期間創建這些數據庫。 看到這個鏈接

問題:

當我運行測試時,它抱怨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'")

如果我注釋掉other_2連接,則測試運行正常。

看起來問題出在后台嗎?

我研究了setup_database 代碼 ,如果我刪除了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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM