有 _DataFrame.tosql 方法,但它仅适用于 mysql、sqlite 和 oracle 数据库。我无法将 postgres 连接或 sqlalchemy 引擎传递给此方法。
原文由 m9_psy 发布,翻译遵循 CC BY-SA 4.0 许可协议
有 _DataFrame.tosql 方法,但它仅适用于 mysql、sqlite 和 oracle 数据库。我无法将 postgres 连接或 sqlalchemy 引擎传递给此方法。
原文由 m9_psy 发布,翻译遵循 CC BY-SA 4.0 许可协议
更快的选择:
以下代码将比 df.to_sql 方法更快地将 Pandas DF 复制到 postgres DB,并且您不需要任何中间 csv 文件来存储 df。
根据您的数据库规范创建引擎。
在您的 postgres 数据库中创建一个表,该表具有与 Dataframe (df) 相同的列数。
DF 中的数据将 插入 到您的 postgres 表中。
from sqlalchemy import create_engine
import psycopg2
import io
如果你想替换表,我们可以使用 df 中的标头用普通的 to_sql 方法替换它,然后将整个大耗时的 df 加载到 DB 中。
engine = create_engine('postgresql+psycopg2://username:password@host:port/database')
df.head(0).to_sql('table_name', engine, if_exists='replace',index=False) #drops old table and creates new empty table
conn = engine.raw_connection()
cur = conn.cursor()
output = io.StringIO()
df.to_csv(output, sep='\t', header=False, index=False)
output.seek(0)
contents = output.getvalue()
cur.copy_from(output, 'table_name', null="") # null values become ''
conn.commit()
原文由 Aseem 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.5k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答897 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
从 pandas 0.14(2014 年 5 月末发布)开始,支持 postgresql。
sql
模块现在使用sqlalchemy
来支持不同的数据库风格。您可以为 postgresql 数据库传递一个 sqlalchemy 引擎(参见 文档)。例如:你是对的,在 0.13.1 版之前的 pandas 中不支持 postgresql。如果您需要使用旧版本的熊猫,这里是
pandas.io.sql
的补丁版本: https ://gist.github.com/jorisvandenbossche/10841234。我之前写过这个,所以不能完全保证它总是有效,但基础应该在那里)。如果将该文件放在工作目录中并导入它,那么您应该可以这样做(其中
con
是一个 postgresql 连接):