You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django迁移PostgreSQL连接失败,DATABASES配置错误求助

Django迁移时PostgreSQL连接错误排查方案

报错信息

Unable to connect to PostgreSQL: 
Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    main()
  File "manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "C:\python\SkillFactory\Sprint\env\lib\site-packages\django\core\management\__init__.py", line 442, in execute_from_command_line
    utility.execute()
  File "C:\python\SkillFactory\Sprint\env\lib\site-packages\django\core\management\__init__.py", line 436, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\python\SkillFactory\Sprint\env\lib\site-packages\django\core\management\base.py", line 412, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\python\SkillFactory\Sprint\env\lib\site-packages\django\core\management\base.py", line 458, in execute
    output = self.handle(*args, **options)
  File "C:\python\SkillFactory\Sprint\env\lib\site-packages\django\core\management\base.py", line 106, in wrapper
    res = handle_func(*args, **kwargs)
  File "C:\python\SkillFactory\Sprint\env\lib\site-packages\django\core\management\commands\migrate.py", line 117, in handle
    executor = MigrationExecutor(connection, self.migration_progress_callback)
  File "C:\python\SkillFactory\Sprint\env\lib\site-packages\django\db\migrations\executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
  File "C:\python\SkillFactory\Sprint\env\lib\site-packages\django\db\migrations\loader.py", line 58, in __init__
    self.build_graph()
  File "C:\python\SkillFactory\Sprint\env\lib\site-packages\django\db\migrations\loader.py", line 235, in build_graph
    self.applied_migrations = recorder.applied_migrations()
  File "C:\python\SkillFactory\Sprint\env\lib\site-packages\django\db\migrations\recorder.py", line 81, in applied_migrations
    if self.has_table():
  File "C:\python\SkillFactory\Sprint\env\lib\site-packages\django\db\migrations\recorder.py", line 57, in has_table
    with self.connection.cursor() as cursor:
  File "C:\python\SkillFactory\Sprint\env\lib\site-packages\django\utils\asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "C:\python\SkillFactory\Sprint\env\lib\site-packages\django\db\backends\base\base.py", line 330, in cursor
    return self._cursor()
  File "C:\python\SkillFactory\Sprint\env\lib\site-packages\django\db\backends\dummy\base.py", line 20, in complain
    raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.

当前settings.py配置片段

load_dotenv()

print("Database Name:", os.getenv('FSTR_DB_NAME'))
print("Database User:", os.getenv('FSTR_DB_USER'))
print("Database Password:", os.getenv('FSTR_DB_PASSWORD'))
print("Database Host:", os.getenv('FSTR_DB_HOST'))
print("Database Port:", os.getenv('FSTR_DB_PORT'))

BASE_DIR = Path(__file__).resolve().parent.parent

# Настройки базы данных
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.getenv('FSTR_DB_NAME'),
        'USER': os.getenv('FSTR_DB_USER'),
        'PASSWORD': os.getenv('FSTR_DB_PASSWORD'),
        'HOST': os.getenv('FSTR_DB_HOST'),
        'PORT': os.getenv('FSTR_DB_PORT'),
    }
}

问题解决方案

1. 修正.env文件加载路径

load_dotenv()默认读取当前工作目录的.env文件,需先定义BASE_DIR再指定加载路径,避免路径错误:

import os
from pathlib import Path
from dotenv import load_dotenv

# 先定义项目根目录
BASE_DIR = Path(__file__).resolve().parent.parent
# 明确加载项目根目录下的.env文件
load_dotenv(BASE_DIR / '.env')

2. 验证环境变量是否加载成功

运行python manage.py runserver或python manage.py shell,查看控制台输出的print语句结果:

  • 若输出None,说明.env未正确加载,检查:
    • .env文件是否在项目根目录(与manage.py同级)
    • .env文件名是否正确(注意是.env,前缀有个点)
    • .env内的变量名是否和os.getenv()的参数完全一致(大小写敏感)

3. 规范.env文件格式

.env文件需采用KEY=VALUE格式,不要加引号,示例:

FSTR_DB_NAME=你的数据库名
FSTR_DB_USER=你的数据库用户名
FSTR_DB_PASSWORD=你的数据库密码
FSTR_DB_HOST=localhost  # 或127.0.0.1
FSTR_DB_PORT=5432       # PostgreSQL默认端口

4. 确保PostgreSQL驱动安装

Django连接PostgreSQL需要psycopg2或psycopg2-binary,执行安装命令:

pip install psycopg2-binary

环境变量配置基础步骤

  1. 在项目根目录(和manage.py同级)创建.env文件
  2. 按KEY=VALUE格式写入数据库连接信息,注意变量名和settings.py中os.getenv()的参数一致
  3. 在settings.py中先导入load_dotenv,定义BASE_DIR后加载.env文件
  4. 运行python manage.py shell测试变量加载:
    import os
    print(os.getenv('FSTR_DB_NAME'))  # 应输出你的数据库名
    

内容的提问来源于stack exchange,提问作者user532577

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:05:14