【发布时间】:2016-01-19 22:12:42
【问题描述】:
使用 psycopg2,我可以从一个 PostgreSQL 数据库连接中的表中选择数据,并将其插入到第二个 PostgreSQL 数据库连接中的表中。
但是,我只能通过设置我想要提取的确切特征,并为我尝试插入的每一列写出单独的变量来做到这一点。
有没有人知道以下两种方法的良好做法:
- 在数据库之间移动整个表,或
- 迭代功能,而不必为要移动的每一列声明变量
- 还是...?
这是我目前使用的脚本,您可以在其中查看特定功能的选择和变量的创建(它有效,但这不是一种实用的方法):
import psycopg2
connDev = psycopg2.connect("host=host1 dbname=dbname1 user=postgres password=*** ")
connQa = psycopg2.connect("host=host2 dbname=dbname2 user=postgres password=*** ")
curDev = connDev.cursor()
curQa = connQa.cursor()
sql = ('INSERT INTO "tempHoods" (nbhd_name, geom) values (%s, %s);')
curDev.execute('select cast(geom as varchar) from "CCD_Neighborhoods" where nbhd_id = 11;')
tempGeom = curDev.fetchone()
curDev.execute('select nbhd_name from "CCD_Neighborhoods" where nbhd_id = 11;')
tempName = curDev.fetchone()
data = (tempName, tempGeom)
curQa.execute (sql, data)
#commit transactions
connDev.commit()
connQa.commit()
#close connections
curDev.close()
curQa.close()
connDev.close()
connQa.close()
另一个注意事项是,python 允许显式使用 SQL 函数/数据类型转换,这对我们来说很重要,因为我们使用 GEOMETRY 数据类型。您可以在上面看到我将其转换为 TEXT,然后将其转储到源表中的现有几何列中 - 这将与 MSSQL Server 一起使用,这是地理空间社区中的一个巨大功能...
【问题讨论】:
-
在 python 格式之间迁移数据有odo.readthedocs.org
-
有什么原因你不想使用
pg_dump并且有 使用python -
我认为您需要了解更多有关 psycopg 的信息。 psycopg 绝对 允许您在单个查询中返回多个列和行。看看some examples。如果您不喜欢位置元组,请参阅
extras。如果您的 ETL 很简单并且您不需要强解耦或者这是一次性操作,请考虑使用外部数据包装器。 FDW 是一种 PostgreSQL 机制,可让您与远程数据库交互,甚至是非 PG 数据库。 -
@fahaddaniyal 我希望将其扩展到 MSSQL Server ... psycopg2 对 PostgreSQL 有好处,但如果 python 可以作为中介,那么有一个很好的 ETL 解决方案正在开发中......!
标签: python postgresql etl psycopg2