Django从SQLite切换PostgreSQL时出现psycopg2 __version__属性错误
问题分析与解决步骤
看起来你在把Django默认数据库从SQLite切换到PostgreSQL时遇到了两个典型问题,我来帮你一步步搞定:
1. 先解决psycopg2驱动的问题
错误日志里的AttributeError: module 'psycopg2' has no attribute '__version__'是核心信号——你的虚拟环境里要么没装PostgreSQL的Python驱动psycopg2,要么安装的包有问题。
修复步骤:
- 先激活你的虚拟环境:
workon meshine_api - 安装psycopg2的二进制版本(比源码安装更省心,适合开发环境):
你的Vagrantfile里已经预装了pip install psycopg2-binarypython3-dev和postgresql这些编译依赖,所以直接安装就能成功。
2. 修正PostgreSQL的数据库配置
你当前的settings.py配置犯了一个常见错误:PostgreSQL的NAME参数不是文件路径(这是SQLite的用法),而是你要连接的数据库名称,另外还得补充用户名、主机等必要参数。
修改后的正确配置:
# Database # https://docs.djangoproject.com/en/2.0/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'meshine_api_db', # 自定义的数据库名称,你可以改成自己喜欢的 'USER': 'postgres', # PostgreSQL默认的超级用户 'PASSWORD': '', # 开发环境下postgres用户通常没设密码,留空即可 'HOST': 'localhost', # 数据库在本地运行,填localhost 'PORT': '5432', # PostgreSQL默认端口 } }
别忘了创建数据库!
配置好之后,得先在PostgreSQL里创建对应的数据库:
- 进入PostgreSQL命令行:
sudo -u postgres psql - 执行创建数据库的SQL命令:
CREATE DATABASE meshine_api_db; - 输入
\q退出命令行。
3. 验证修复效果
做完上面两步,运行数据库迁移再启动服务器:
python manage.py makemigrations python manage.py migrate python manage.py runserver 0.0.0.0:8080
这时候应该就能正常启动了。
可选:让Vagrant自动帮你装依赖
如果你不想每次启动虚拟机都手动装包,可以在Vagrantfile的shell脚本末尾加这段,让它自动创建虚拟环境并安装依赖:
# 创建虚拟环境并安装必要包 su - ubuntu -c "mkvirtualenv meshine_api -p python3 && workon meshine_api && pip install psycopg2-binary django"
内容的提问来源于stack exchange,提问作者kabrice
相关产品推荐
相关产品推荐

