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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:50:29