使用.env文件时Django数据库配置异常,执行migrate报错
Django读取.env配置数据库时migrate报错:未提供ENGINE值
执行migrate操作时触发以下错误:
django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.
使用.env文件配置数据库参数时出现上述问题,但将参数硬编码到settings.py后,migrate可正常执行。
当前settings.py数据库配置
DATABASES = { 'default': { 'ENGINE': os.environ.get('DB_ENGINE'), 'NAME': os.environ.get('DB_NAME'), 'USER': os.environ.get('DB_USER'), 'PASSWORD': os.environ.get('DB_PASSWORD'), 'HOST': os.environ.get('DB_HOST'), 'PORT': os.environ.get('DB_PORT'), } }
.env文件内容
# DB DB_ENGINE=django.db.backends.postgresql DB_NAME=db DB_USER=user DB_PASSWORD=password DB_HOST=127.0.0.1 DB_PORT=5432
PyCharm的.env设置

可正常运行的硬编码配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'db', 'USER': 'user', 'PASSWORD': 'password', 'HOST': '127.0.0.1', 'PORT': '5432', } }
问题排查与解决方法
确保.env文件被正确加载
若使用python-dotenv管理环境变量,必须在settings.py开头添加加载代码:from dotenv import load_dotenv import os load_dotenv() # 加载项目根目录下的.env文件没有这段代码的话,
os.environ.get()无法读取.env中的变量,会返回None,导致ENGINE参数缺失。验证PyCharm运行配置
检查Run/Debug Configurations中,当前运行migrate的配置是否勾选了"Load environment variables from file",并指定了正确的.env文件路径。即使全局配置了.env,个别运行配置可能未启用该选项。确认变量读取状态
在settings.py中临时添加打印语句,验证变量是否读取成功:print("DB_ENGINE:", os.environ.get('DB_ENGINE'))执行migrate前查看控制台输出,若显示
None,说明变量未被正确加载。添加默认值兜底
为避免变量读取失败直接报错,可给os.environ.get()设置默认值:'ENGINE': os.environ.get('DB_ENGINE', 'django.db.backends.postgresql'),这样即使变量未加载,也能保证配置有默认值,方便后续排查。
内容的提问来源于stack exchange,提问作者Yuliyan Petrov
相关产品推荐
相关产品推荐

