Django 2切换PostgreSQL后出现BaseDatabaseValidation导入错误的解决方法
解决Django 2切换PostgreSQL时的导入错误
我在跟着《Django 2 Web应用开发》做项目,把数据库从SQLite切换到PostgreSQL后,碰到了下面这个导入错误:
Traceback (most recent call last): File "manage.py", line 15, in <module> execute_from_command_line(sys.argv) File "C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\management\__init__.py", line 371, in execute_from_command_line utility.execute() File "C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\management\__init__.py", line 317, in execute settings.INSTALLED_APPS File "C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\site-packages\django\conf\__init__.py", line 56, in __getattr__ self._setup(name) File "C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\site-packages\django\conf\__init__.py", line 43, in _setup self._wrapped = Settings(settings_module) File "C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\site-packages\django\conf\__init__.py", line 106, in __init__ mod = importlib.import_module(self.SETTINGS_MODULE) File "C:\Users\HP\AppData\Local\Programs\Python\Python36\lib\importlib\__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 994, in _gcd_import File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 665, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 678, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "H:\MyMDB\django\config\settings.py", line 16, in <module> from django.db.backends.postgresql_psycopg2.base import ( ImportError: cannot import name 'BaseDatabaseValidation'
当前我的settings.py里的相关配置是这样的:
""" Django settings for config project. Generated by 'django-admin startproject' using Django 2.0.3. ... """ import os from django.db.backends.postgresql_psycopg2.base import ( DatabaseFeatures as BasePGDatabaseFeatures, DatabaseWrapper as BasePGDatabaseWrapper, DatabaseOperations as BasePGDatabaseOperations, DatabaseSchemaEditor as BasePGDatabaseSchemaEditor, DatabaseClient, DatabaseCreation as BasePGDatabaseCreation, DatabaseIntrospection, BaseDatabaseValidation, ) # ... 其他配置 ... # Database DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgredql', 'NAME': 'mymdb', 'USER': 'mymdb', 'PASSWORD': 'development', 'HOST': '127.0.0.1', 'PORT': '5432', } }
解决步骤
移除不必要的底层数据库模块导入
你完全不需要手动导入django.db.backends.postgresql_psycopg2.base里的这些模块,Django会自动处理PostgreSQL的数据库连接逻辑。而且在Django 2.0中,BaseDatabaseValidation已经被移除了,这就是你报错的直接原因。直接删掉settings.py开头那段从from django.db.backends.postgresql_psycopg2.base import (...)的代码即可。修正数据库引擎的拼写错误
看你的DATABASES配置里,ENGINE写成了django.db.backends.postgredql——这里多了一个d,正确的引擎名称应该是django.db.backends.postgresql。确保安装了PostgreSQL的Python驱动
Django连接PostgreSQL需要依赖psycopg2,如果还没安装,执行下面的命令:pip install psycopg2-binary用
psycopg2-binary是因为它不需要本地编译环境,安装起来更简单,适合开发环境使用。
做完以上修改后,运行python manage.py migrate测试一下,应该就能正常连接PostgreSQL并执行数据库迁移了。
内容的提问来源于stack exchange,提问作者Lohith
相关产品推荐
相关产品推荐

