如何通过Pandas将DataFrame创建到PostgreSQL的Staging模式?
解决方案
你遇到的问题是因为to_sql会把传入的第一个参数当作完整的表名,不会自动解析「模式.表名」的结构,所以PostgreSQL默认在public模式下创建了名为Staging.tblsalesdata的表。下面是两种正确的实现方式:
方法一:使用schema参数(推荐)
to_sql方法内置了schema参数,专门用来指定目标数据库模式,直接传入'Staging'即可:
from sqlalchemy import create_engine # 建立数据库连接 engine = create_engine('postgresql://postgres:root@localhost:5432/TestWarehouse') # 在Staging模式下创建tblsalesdata表 sales_df_col.to_sql( name='tblsalesdata', con=engine, schema='Staging' )
方法二:修改连接字符串指定默认模式
可以在创建引擎时,通过连接字符串的options参数设置默认搜索路径为Staging,后续to_sql无需额外指定schema就会默认使用该模式:
from sqlalchemy import create_engine # 连接时指定默认模式为Staging engine = create_engine('postgresql://postgres:root@localhost:5432/TestWarehouse?options=-csearch_path%3DStaging') # 直接创建表,默认会在Staging模式下 sales_df_col.to_sql(name='tblsalesdata', con=engine)
注意事项
- 方法一灵活性更高,适合需要在不同模式间切换操作的场景;
- 方法二会改变当前连接的默认模式,后续所有未指定
schema的数据库操作都会使用Staging模式,需根据实际需求选择。
内容的提问来源于stack exchange,提问作者Awesome
相关产品推荐
相关产品推荐

