Django连接AWS RDS PostgreSQL时使用Ubuntu用户名而非配置的数据库用户
Django连接AWS RDS PostgreSQL身份验证失败问题解决步骤
问题核心原因
你遇到的报错本质是两个配置问题叠加导致的:一是.env配置读取异常,Django拿不到正确的数据库用户名,就 fallback 到当前操作系统的ubuntu用户尝试连接;二是密码中的特殊字符#被错误截断,即使读到用户名也无法通过密码校验。
具体解决方法
1. 修复密码特殊字符的读取问题
python-dotenv库默认会把#识别为注释的起始标识,即使#出现在配置值中间,也会截断后面的内容,导致读取到的密码不完整。
- 解决方案:打开
.env文件,将PASSWORD对应的值用单引号完整包裹,示例:PASSWORD='你的完整密码#xxx'
2. 确认.env文件被正确加载
如果.env文件没有被正确加载,config()方法读不到配置值,Django就会使用默认的系统用户作为数据库连接用户名:
- 首先确保你已经安装了依赖库:
pip install python-dotenv - 检查
settings.py开头是否已经添加了加载.env的代码,示例如下(注意替换为你自己的项目路径逻辑):from pathlib import Path import os from dotenv import load_dotenv BASE_DIR = Path(__file__).resolve().parent.parent # 加载项目根目录下的.env文件 load_dotenv(os.path.join(BASE_DIR, '.env')) - 确认
.env文件放在项目根目录(和manage.py同级),且运行Django服务的用户拥有该文件的读取权限。
验证配置是否生效
在项目根目录执行以下命令进入Django shell,打印当前读取的数据库配置验证正确性:
python manage.py shell
在shell中执行以下代码:
from django.conf import settings print("当前读取的数据库用户:", settings.DATABASES['default']['USER']) print("当前读取的数据库密码:", settings.DATABASES['default']['PASSWORD'])
如果输出的内容和你.env中配置的一致,再重新执行python manage.py runserver即可正常连接数据库。
内容的提问来源于stack exchange,提问作者shyam yadav
相关产品推荐
相关产品推荐

