将Python中合并后的pandas DataFrame导入pgAdmin的PostgreSQL库问题求助
Python合并DataFrame写入PostgreSQL问题说明
你代码里的正确部分
- 技术选型正确:用pandas做数据处理、SQLAlchemy做数据库连接引擎、psycopg2做PostgreSQL驱动,是Python操作PostgreSQL导入导出数据的标准方案
- 业务流程逻辑通顺:从读取本地Excel、重命名匹配字段、读取数据库现有表、按交易ID合并、按账号和交易ID分组聚合金额,完全符合会计数据对账合并的处理逻辑
- 导出语法正确:
to_sql的参数设置没问题,if_exists='replace'是表存在就覆盖,index=False是不把pandas的索引列写入数据库,符合常规需求
大概率会导致导出失败的常见问题
- 密码配置错误:代码里
password = ' '是空格值,请确认你本地PostgreSQL的postgres用户实际密码,大部分情况这里是你忘记填写正确密码,是连接失败的头号原因 - 文件路径错误:
'in/final_project/gj.xlsx'是相对路径,要确认你运行Python脚本的工作目录下,确实存在对应层级的文件,文件找不到的话代码会在第一步读取Excel时就报错,无法走到导出步骤 - 关联字段类型不匹配:你按
transaction_id合并两个表,如果gj表里的transaction_id是字符串格式,transactions表里的是数字格式,会匹配不到数据,合并后得到空表,导出的就是空表,看起来就像导出失败 - 数据库权限不足:确认postgres用户对
final_project数据库有建表、写入数据的权限,本地默认安装的PostgreSQL一般都有权限,企业环境如果有权限限制会写入失败 - 编码不兼容:如果你的数据里有中文,要确认PostgreSQL的
final_project数据库编码是UTF-8,否则写入时会因为乱码报错 - 多余导入不影响:你导入了datacompy但没用到,删掉就行,不影响现有代码运行
排查步骤(按顺序走就行,和对账找错逻辑一致)
- 先测数据库连接:在
conn = create_engine(connect)后面加一行conn.connect(),如果这步报错,就核对IP、端口、库名、账号密码四个参数,同时确认你本地PostgreSQL服务已经启动 - 再测数据读取:分别打印
print(gj.shape)、print(t.shape),确认两个源数据都读取成功,行数和你预期的一致 - 再测合并结果:打印
print(gjt.shape),确认合并后的数据行数不是0,有实际数据 - 最后看写入报错:如果前面三步都正常还是写入失败,看控制台的报错信息关键词,比如
permission denied就是权限问题,type mismatch就是字段类型不匹配,按提示调整就行
补充说明:pgAdmin只是PostgreSQL的可视化管理工具,你把数据写入PostgreSQL的
final_project库后,打开pgAdmin刷新对应库的表列表,就能看到生成的gjt_trial表了
内容的提问来源于stack exchange,提问作者Johnnyduke
相关产品推荐
相关产品推荐

