python - 将 Pandas 数据帧发送到 SQL 数据库的最佳方法?

标签 python pandas postgresql pgadmin

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

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

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

my_dataframe.to_sql('name_of_sql_table',connection, index = False, if_exists = 'append', method="multi") 

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

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

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

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

最佳答案

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

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

df.to_sql("table_name", 
          connection, 
          index=False, 
          if_exists='append',
          chunksize=25000,
          method=None)

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

method : {None, ‘multi’, callable}, default None

Controls the SQL insertion clause used:

‘multi’: Pass multiple values in a single INSERT clause. callable with signature (pd_table, conn, keys, data_iter). Details and a sample callable implementation can be found in the section insert method.

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

关于python - 将 Pandas 数据帧发送到 SQL 数据库的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58951199/

相关文章:

sql - Greenplum:尚不支持从 segDB 执行 SQL 语句的函数

python - 在表单 django-allauth app 的末尾显示 google recaptcha

Python正则表达式如果单词在行中则不匹配

spring - 如何使用jpa或hibernate防止表被删除

分配结果的 SQL 排序

python - 使用 numpy 或 pandas 的时间序列

python - windows:在双击标题栏时禁用最大化窗口,并在单击任务栏时最小化窗口

Python:从文件中读取行,检查是否在其他文件中,是否是输出文件的打印行

python - 如何合并两个具有不同列名但行数相同的数据框?

python - “str”对象没有属性 'values' - 对象看起来不是字符串