我正在尝试将数据帧的内容写入除“public”架构之外的架构中的表。我遵循Pandas writing dataframe to other postgresql schema中描述的模式:
meta = sqlalchemy.MetaData()
engine = create_engine('postgresql://some:user@host/db')
meta = sqlalchemy.MetaData(engine, schema='schema')
meta.reflect(engine, schema='schema')
pdsql = pandas.io.sql.PandasSQLAlchemy(engine, meta=meta)
但当我试着给桌子写信时:
pdsql.to_sql(df, 'table', if_exists='append')
我得到以下错误:
InvalidRequestError: Table 'schema.table' is already defined for this MetaData instance. Specify 'extend_existing=True' to redefine options and columns on an existing Table object.
我还试着将extend_existing=True
添加到reflect
调用中,但这似乎没有什么区别。
我怎样才能让熊猫给这张桌子写信?
更新:从pandas 0.15开始,支持写入不同的架构。然后可以使用
schema
关键字参数:正如我在链接的question中所说,目前还不支持使用
read_sql
和to_sql
函数写入不同的模式(但是已经提交了一个增强请求:https://github.com/pydata/pandas/issues/7441)。但是,我描述了使用对象接口的解决方法。但是我在这里描述的只适用于添加一次表,而不适用于替换和/或追加表。因此,如果只想添加,请先删除现有表,然后再次写入。
如果你想添加到表中,下面是一个更复杂的解决方法。首先重新定义
has_table
和get_table
:然后像您所做的那样创建
PandasSQLAlchemy
对象,并写入数据:这显然不是一个好的方法,但是我们正在努力为0.15提供更好的API。如果你想帮忙,请进https://github.com/pydata/pandas/issues/7441。
当心!此接口(
PandasSQLAlchemy
)尚未真正公开,仍将在下一版本的pandas中进行更改,但这是为pandas 0.14(.1)执行此操作的方法。更新:
PandasSQLAlchemy
在pandas 0.15中重命名为SQLDatabase
。相关问题 更多 >
编程相关推荐