Flask连接PostgreSQL数据库时密码认证失败问题求助
解决PostgreSQL密码认证失败问题(Flask+SQLAlchemy)
针对你遇到的password authentication failed for user "admin"报错,即便确认用户名密码正确,可按以下步骤排查解决:
1. 检查PostgreSQL的认证配置文件(pg_hba.conf)
PostgreSQL的本地连接认证方式可能限制了密码登录:
- 找到pg_hba.conf文件(通常在
/var/lib/postgresql/<版本>/main/或PostgreSQL安装目录下的data文件夹) - 找到对应
127.0.0.1/32的行,将认证方式从peer或ident修改为md5(PostgreSQL 10及以下)或scram-sha-256(PostgreSQL 10+):host all all 127.0.0.1/32 md5 - 修改后重启PostgreSQL服务:
# Ubuntu/Debian sudo systemctl restart postgresql # CentOS/RHEL sudo systemctl restart postgresql-<版本>
2. 重置"admin"用户密码
可能密码设置时存在隐藏错误,通过PostgreSQL超级用户重置:
- 切换到postgres用户:
sudo su - postgres - 进入psql命令行:
psql - 执行重置密码命令:
ALTER USER admin WITH PASSWORD '你的密码'; - 退出psql:
\q,再测试连接。
3. 测试基础连接(排除代码问题)
先用psql命令行直接连接,确认数据库服务本身可访问:
psql -U admin -d userid -h 127.0.0.1 -p 5432
如果此命令连接失败,说明问题出在PostgreSQL配置而非Flask代码;如果能成功连接,再检查代码中的连接字符串。
4. 检查连接字符串的特殊字符
如果密码包含@、:、/等URL特殊字符,需要进行URL编码(比如@换成%40)。你的密码er******10看起来无特殊字符,但可确认是否有大小写或空格问题。
额外优化:避免重复创建表
你的代码中每次访问路由都会执行CREATE TABLE,会导致"表已存在"报错。建议使用SQLAlchemy的模型来管理表结构:
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://admin:er******10@127.0.0.1:5432/userid' db = SQLAlchemy(app) # 定义数据模型 class FormUser(db.Model): id = db.Column(db.Integer, primary_key=True) uid = db.Column(db.String(50), nullable=False) class HotelUser(db.Model): id = db.Column(db.Integer, primary_key=True) uid = db.Column(db.String(50), nullable=False) class Booking(db.Model): id = db.Column(db.Integer, primary_key=True) bid = db.Column(db.String(50), nullable=False) roomtype = db.Column(db.String(20), nullable=False) roomamount = db.Column(db.String(5), nullable=False) datein = db.Column(db.String(20), nullable=False) dateout = db.Column(db.String(20), nullable=False) @app.route('/') def index(): return "succ" if __name__ == '__main__': with app.app_context(): db.create_all() # 仅在表不存在时创建 app.run(debug=True)
内容的提问来源于stack exchange,提问作者hugo
相关产品推荐
相关产品推荐

