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

使用SQLAlchemy加载CSV到PostgreSQL时密码认证失败如何解决

错误根因

抛出password authentication failed for user "jim"说明PostgreSQL服务端拒绝了当前连接请求,核心原因只有两类:一是连接串里提供的jim用户密码和数据库存储的凭证不匹配,二是PostgreSQL的本地访问规则不允许当前地址用密码方式登录。问题和SQLAlchemy、pandas的CSV写入逻辑无关。


1. 先确认账号密码有效性

先绕过Python代码直接用psql命令行测试,排除代码层面的问题:
执行命令:
psql -U jim -h localhost -p 5432 -d travel
按提示输入你连接串里写的password,如果此时同样报认证失败,说明密码本身错误,和代码无关。

如果忘记jim用户的密码,用默认超级用户postgres重置:

  • 切换到系统postgres用户:sudo su - postgres
  • 进入psql控制台:psql
  • 执行重置命令:ALTER USER jim WITH PASSWORD '你的新密码';
  • 输入\q退出控制台,切回当前系统用户,用新密码重新执行psql连接命令,确认能正常登录后再修改Python代码里的连接串密码。

2. 检查本地连接认证规则

如果确认密码完全正确仍报错,检查PostgreSQL的pg_hba.conf访问控制配置。
找到对应系统的pg_hba.conf文件:

  • Debian/Ubuntu:/etc/postgresql/<数据库版本号>/main/pg_hba.conf
  • Windows:C:\Program Files\PostgreSQL\<版本号>\data\pg_hba.conf
  • macOS(Homebrew安装):/usr/local/var/postgres/pg_hba.conf

打开文件找到本地连接配置段,把IPv4和IPv6的localhost连接认证方式改为md5(即密码认证),不要用peer/ident这类基于系统用户的认证方式:

# IPv4本地连接
host    all             all             127.0.0.1/32            md5
# IPv6本地连接
host    all             all             ::1/128                 md5

注意:报错信息里明确显示连接目标是::1(IPv6本地回环地址),如果只修改127.0.0.1对应的IPv4规则,仍然会触发认证失败。

修改完成后重启PostgreSQL服务让配置生效:

  • Debian/Ubuntu:sudo systemctl restart postgresql
  • Windows:在服务管理器中找到PostgreSQL服务点击重启
  • macOS(Homebrew安装):brew services restart postgresql

3. 修正现有代码问题

你贴的代码存在两个会导致运行异常的问题,一并修正:

  • 缺少pandas导入语句,运行会触发NameError
  • 提前初始化的Session对象没有实际作用,还会占用数据库连接,to_sql方法会直接从engine获取连接不需要手动建Session
  • 没有提前执行表结构创建,虽然to_sql会自动建表,但和你定义的ORM模型字段类型可能存在偏差

修正后的完整代码:

import pandas as pd
from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Integer, String, Date

# 替换为你重置后的正确jim用户密码
engine = create_engine('postgresql+psycopg2://jim:你的正确密码@localhost:5432/travel')

Base = declarative_base()

class travel(Base):
    __tablename__ = 'travel_full'
    
    id = Column(Integer, primary_key=True)
    year = Column(Date)
    quarter = Column(Integer)
    mode = Column(String(55))
    country = Column(String(55))
    purpose = Column(String(55))

# 根据ORM模型创建表
Base.metadata.create_all(engine)

df = pd.read_csv('travel.csv')
df.to_sql(con=engine, index_label='id', name=travel.__tablename__, if_exists='replace')

验证流程

先在命令行用psql确认账号密码可以正常登录travel库,再运行Python脚本即可正常导入CSV数据,不会再出现认证失败报错。

内容的提问来源于stack exchange,提问作者cloudycider

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 20:18:29