【问题标题】:Improve loading dataframe into postgress db with python使用 python 改进将数据帧加载到 postgres db
【发布时间】:2020-08-17 05:26:23
【问题描述】:

今天我开始学习 postgress,并尝试做与将数据帧加载到我的 Oracle 数据库中相同的事情

因此,例如,我有一个包含 70k 记录和 10 列的 df。我的代码如下:

from sqlalchemy import create_engine

conn = create_engine('postgresql://'+data['user']+':'+data['password']+'@'+data['host']+':'+data['port_db']+'/'+data['dbname'])

df.to_sql('first_posgress', conn)

这段代码有点像我用于 Oracle 表的代码,但在这种情况下,完成任务需要一些时间。所以我想知道是否有更好的方法来做到这一点,或者是因为在 postgress 中通常比较慢。

我在 SO 和 google 上找到了一些示例,但主要集中在创建表格,而不是插入 df。

【问题讨论】:

    标签: python sql pandas postgresql dataframe


    【解决方案1】:

    如果您可以使用 psycopg2 而不是 SQLALchemy,您可以将 df 转换为 csv,然后使用 cursor.copy_from() 将 csv 复制到数据库中。

    import io
    
    output = io.StringIO()
    df.to_csv(output, sep=",")
    output.seek(0)
    
    #psycopg2.cursor:
    cursor.copy_from(   
            output,
            target_table,  #'first_posgress'
            sep=",",
            columns=tuple(df.columns)
        )
    con.commit() #psycopg2 conn 
    

    (不知道SQLAlchemy有没有类似的功能,也比较快)

    Psycopg2 光标Documentation

    blogpost 包含更多信息!

    希望这对你有用!

    【讨论】:

      猜你喜欢
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 2012-08-14
      相关资源
      最近更新 更多