将大熊猫数据帧发送到 SQL 数据库的最佳方法?

2 python postgresql pandas pgadmin

我有一个 pandas 数据框,有 10 列和 1000 万行。

我在 pgadmin4(一个用于管理 MSSQL 服务器等数据库的应用程序)中创建了一个空表来存储这些数据。

但是,当运行以下命令时:

my_dataframe.to_sql('name_of_sql_table',connection, index = False, if_exists = 'append', method="multi") 
Run Code Online (Sandbox Code Playgroud)

由于进程太长/内存不足,它需要很长时间才能运行,并且经常使我的 jupyter 内核崩溃。

是否有任何加速“将 pandas 发送到 sql 表”的建议方法?

我能想到的一些事情是将数据分割成 100 万行块,然后一次发送一个 - 在运行该to_sql()方法时附加行。

我无法选择直接将数据加载到 pgadmin4 - 我唯一的方法是将数据从 python 发送到 pgadmin。

Nap*_*rty 5

看看https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html

\n\n

如果这适用于您的版本pandas,请使用

\n\n
df.to_sql("table_name", \n          connection, \n          index=False, \n          if_exists=\'append\',\n          chunksize=25000,\n          method=None)\n
Run Code Online (Sandbox Code Playgroud)\n\n

您的查询可能会崩溃,因为您正在使用method=\'multi\',因为这会执行以下操作:

\n\n
\n

方法:{无,\xe2\x80\x98multi\xe2\x80\x99,可调用},默认无

\n\n

控制使用的 SQL 插入子句:

\n\n

\xe2\x80\x98multi\xe2\x80\x99:在单个 INSERT 子句中传递多个值。\n 可使用签名(pd_table、conn、keys、data_iter)进行调用。\n 详细信息和示例可调用实现可以在节插入方法。

\n
\n\n

这意味着将在内存中为所有行pandas构造语句。每行使用一个语句将允许将保存分块到数据库。chunksizeINSERTpandas

\n