【问题标题】:Python Postgres Best way to insert data from table on one DB to another table on another DBPython Postgres 将数据从一个数据库上的表插入到另一个数据库上的另一个表的最佳方法
【发布时间】:2017-01-31 19:26:14
【问题描述】:

我有以下 python 代码将 postgres DB1 上的表内容和 INSERTS 复制到 postgres DB2 上的类似表中。

我想通过使用 BULK INSERTS 来加快速度。我如何实现这一目标

import psycopg2
import sys
import os


all_data = []


try:
    connec = psycopg2.connect("host = server1 dbname = DB1 ")
    connecc = psycopg2.connect("host = server2 dbname = DB2 ")
    connec.autocommit = True
    connecc.autocommit = True
except:
    print("I am unable to connect to the database.")


cur = connec.cursor()

curr = connecc.cursor()



cur.execute("""SELECT * FROM TABLE1""")


curr.execute("TRUNCATE table TABLE2")

rows = cur.fetchall()

for row in rows:
    all_data = row


    curr.execute("INSERT INTO TABLE2 "
                 "VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,     %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,"
             " %s)"
    ,(all_data[0],  all_data[1],all_data[2],all_data[3],all_data[4],     all_data[5], all_data[6], all_data[7],
      all_data[8], all_data[9], all_data[10], all_data[11],     all_data[12], all_data[13], all_data[14],all_data[15],
      all_data[16], all_data[17], all_data[18], all_data[19],
      all_data[20], all_data[21], all_data[22]))

    connecc.commit()

connec.close()

connecc.close()

【问题讨论】:

标签: postgresql python-3.x plpgsql bulkinsert sqlbulkcopy


【解决方案1】:

最简单的方法是使用 FDW(外部数据包装器)连接两个服务器(https://www.postgresql.org/docs/9.5/static/postgres-fdw.html)。并由一台服务器中的两个表操作。

第二种方法是使用 dblink (https://www.postgresql.org/docs/9.6/static/dblink.html)。

通过这两种方式,数据直接从一台服务器传递到另一台服务器(不通过您的程序)

【讨论】:

  • DBLINK 救援
  • FDW 是最新的方式,但需要更多的操作。但允许以本地方式对外部表进行查询。不仅仅是外部表可能不仅是 postgresql - 还有 oracle、mysql 甚至只是 csv 文件 :-)
猜你喜欢
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2016-07-19
  • 2012-08-27
相关资源
最近更新 更多