使用Pandas将数据写入PostgreSQL指定Schema失败问题求助
使用Pandas将数据写入PostgreSQL指定Schema失败问题求助
我明白你现在的困扰——明明在代码里把表名写成了project_demo.mapping_table,想把数据写到新的schema里,结果却还是跑到了原来的public schema,这确实挺让人摸不着头脑的。让我帮你拆解下问题,以及给出具体的解决办法。
问题根源
Pandas的to_sql方法并不会自动识别你写在table_name里的schema前缀(也就是那个点分隔的部分)。当你直接把project_demo.mapping_table传给name参数时,它会把整个字符串当成表名,而不是schema.表名的组合,所以最终还是会用数据库默认的public schema来创建表。
解决方案
你需要把schema和表名分离开,分别传给to_sql的schema参数和name参数,同时还要确保你的数据库用户有目标schema的操作权限。
1. 修改代码中的写入逻辑
把原来的表名定义和to_sql调用改成下面这样:
# 拆分schema和表名 schema_name = 'project_demo' table_name = 'mapping_table' # 插入数据到指定schema的表中 result.to_sql( name=table_name, con=engine, schema=schema_name, if_exists='replace', index=False, dtype={'columns': JSON, 'original_columns': JSON} )
2. 检查并授予数据库用户权限
如果上面的修改后还是不行,大概率是你的pg_user没有在project_demo schema下创建表、写入数据的权限。可以登录PostgreSQL执行以下SQL语句来授权:
-- 授予schema的使用和创建权限 GRANT USAGE, CREATE ON SCHEMA project_demo TO my_user; -- 授予schema下所有表的读写权限 GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA project_demo TO my_user;
额外验证
你可以在执行完代码后,登录数据库查询一下project_demo schema下的表:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'project_demo';
如果看到mapping_table,就说明成功写入到指定schema了。
备注:内容来源于stack exchange,提问作者Darkmaster
相关产品推荐
相关产品推荐

