我正在尝试将Django应用程序从3.0.11迁移到3.1。
我可以运行该应用程序而没有任何问题。但是我不能再运行测试了。
运行时抛出以下错误 python manage.py test
django.db.utils.ConnectionDoesNotExist: The connection e doesn't exist
这是从我的settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': config("DB_NAME", default='postgres'),
'USER': config('DB_USER', default='postgres'),
'PASSWORD': config('DB_PASSWORD', default='postgres'),
'HOST': config('DB_HOST', default='postgres'),
}
}
完整的堆栈跟踪:
Creating test database for alias 'default'...
Destroying test database for alias 'default'...
Traceback (most recent call last):
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/db/utils.py", line 172, in ensure_defaults
conn = self.databases[alias]
KeyError: 'e'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
utility.execute()
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/core/management/commands/test.py", line 23, in run_from_argv
super().run_from_argv(argv)
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/core/management/base.py", line 330, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/core/management/base.py", line 371, in execute
output = self.handle(*args, **options)
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/core/management/commands/test.py", line 53, in handle
failures = test_runner.run_tests(test_labels)
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/test/runner.py", line 698, in run_tests
self.run_checks(databases)
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/test/runner.py", line 636, in run_checks
call_command('check', verbosity=self.verbosity, databases=databases)
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/core/management/__init__.py", line 168, in call_command
return command.execute(*args, **defaults)
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/core/management/base.py", line 371, in execute
output = self.handle(*args, **options)
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/core/management/commands/check.py", line 63, in handle
self.check(
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/core/management/base.py", line 392, in check
all_issues = checks.run_checks(
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/core/checks/registry.py", line 70, in run_checks
new_errors = check(app_configs=app_configs, databases=databases)
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/core/checks/model_checks.py", line 34, in check_all_models
errors.extend(model.check(**kwargs))
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/db/models/base.py", line 1264, in check
*cls._check_fields(**kwargs),
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/db/models/base.py", line 1343, in _check_fields
errors.extend(field.check(**kwargs))
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/db/models/fields/__init__.py", line 2361, in check
*super().check(**kwargs),
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/db/models/fields/__init__.py", line 1724, in check
*super().check(**kwargs),
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/db/models/fields/__init__.py", line 203, in check
*self._check_backend_specific_checks(**kwargs),
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/db/models/fields/__init__.py", line 345, in _check_backend_specific_checks
errors.extend(connections[alias].validation.check_field(self, **kwargs))
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/db/utils.py", line 211, in __getitem__
self.ensure_defaults(alias)
File "/usr/local/Caskroom/miniconda/base/envs/mysite/lib/python3.8/site-packages/django/db/utils.py", line 174, in ensure_defaults
raise ConnectionDoesNotExist("The connection %s doesn't exist" % alias)
django.db.utils.ConnectionDoesNotExist: The connection e doesn't exist
有没有人遇到过类似的问题,可以帮我解决这个问题吗?
所以我终于找到了问题。崩溃是由单个“配置错误”的测试引起的。
我做了一个看起来像这样的测试:
class MyTest(SimpleTestCase):
databases = 'other'
def test_something(self):
pass
我猜该属性databases
在Django 3.1之前被忽略了,为了修复它,我不得不写databases = {"other"}
(这也确实需要在settings.py
名为other的数据库中进行配置)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句