
django 迁移失败提示 “no module named 'psycopg'” 通常由两个独立但常同时出现的问题导致:一是未正确安装 psycopg2,二是 settings.py 中 databases 配置错误——尤其是 'name' 字段误填为文件路径而非 postgresql 数据库名。
django 迁移失败提示 “no module named 'psycopg'” 通常由两个独立但常同时出现的问题导致:一是未正确安装 psycopg2,二是 settings.py 中 databases 配置错误——尤其是 'name' 字段误填为文件路径而非 postgresql 数据库名。
在 Django 中连接 PostgreSQL,DATABASES 配置必须严格遵循数据库服务的实际结构。你当前的配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': BASE_DIR / 'db.postgresql',
}
}
存在两个关键错误:
'NAME' 值错误:BASE_DIR / 'db.postgresql' 是一个本地文件路径(类似 ./db.postgresql),而 PostgreSQL 的 'NAME' 必须是已创建的逻辑数据库名称(如 'myproject_db'),不是文件路径。PostgreSQL 是客户端-服务端架构,数据库存储在服务端,Django 仅通过网络连接访问它。
缺少必要连接参数:除 'NAME' 外,还必须提供 'USER'、'PASSWORD'、'HOST'(默认 'localhost')和 'PORT'(默认 5432),否则连接将失败或超时。
✅ 正确配置示例(假设你已在 PostgreSQL 中执行 CREATE DATABASE myproject_db;):
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'myproject_db', # ✅ 数据库名(字符串),非路径
'USER': 'postgres', # ✅ 数据库用户名(如用默认 superuser)
'PASSWORD': 'your_password', # ✅ 对应用户的密码
'HOST': 'localhost', # ✅ PostgreSQL 服务地址(Docker 可能为 'db')
'PORT': '5432', # ✅ 默认端口,可省略但建议显式声明
}
}
? 验证与排错步骤:
- ✅ 确保 psycopg2 已安装:运行 pip install psycopg2-binary(开发环境推荐)或 pip install psycopg2(生产环境需系统依赖);
- ✅ 使用 psql -U postgres -h localhost 手动连接 PostgreSQL,确认数据库 myproject_db 存在且用户有权限;
- ✅ 检查 PostgreSQL 服务是否运行:sudo systemctl status postgresql(Linux)或 Activity Monitor(macOS);
- ❌ 不要将 'NAME' 设为 .sqlite3、.postgresql 或任何文件路径——那是 SQLite 的用法,不适用于 PostgreSQL。
? 小贴士:若使用 Docker 或云数据库(如 AWS RDS、Supabase),'HOST' 和 'PORT' 需替换为实际服务地址和端口,并确保网络可达及白名单配置正确。
完成修正后,执行 python manage.py migrate 即可正常初始化数据库表结构。登录页 500 错误若源于迁移未完成,此时也将随之解决。











