如何使用pyodbc将psycopg2的结果集插入到SQL表中?

时间:2017-05-31 15:22:40

标签: sql-server postgresql python-3.x psycopg2 pyodbc

我有一个psycopg连接:

conngre = psycopg2.connect("host='blah' port='blah' dbname='blah' user='blah' password='blah'")
conngre = conngre.cursor()

with open('exportgre', 'r') as selectexport:
    var1 = selectexport.read()
    conngre.execute(var1)

这会调用我想要的结果集,然后将其转储到带有连接的SQL Server预定义表中:

sqlconn = pyodbc.connect(r'DSN=d;UID=blah;PWD=blah')
cursql = sqlconn.cursor()

with open('importsql', 'r') as selectexport:
    var2 = selectexport.read()
    cursql.execute(var2)

是否可以将第一个结果集中的结果传递给第二个结果集的插入?

我现在运行以下代码作为测试,以便在使用我的实际sql之前使其工作:

import pyodbc

sqlconn = pyodbc.connect(r'DSN=d;UID=blah;PWD=blah')
cursql = sqlconn.cursor()

with cursql.execute("select * from blah.dbo.export_test"):

rows = cursql.fetchall()

for row in rows:
    cursql.execute('insert into TouchStar.dbo.export_test values (?)', (row[0]))
    print(row)

然而,它似乎只是覆盖表中已有的数据?

我需要以某种方式附加吗?

1 个答案:

答案 0 :(得分:1)

你想在中间使用Python词典。首先,使用RealDictCursor从PostgreSQL中选择:

<Import Project="..\packages\X.3.3.2.0\build\X.props" Condition="Exists('..\packages\X.3.3.2.0\build\X.props')" />

<Error Condition="!Exists('..\packages\X.3.3.2.0\build\X.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\X.3.3.2.0\build\X.props'))" />

对于“selectexport”中的每个SELECT语句,这将运行查询,并循环遍历行。对于每一行,它将插入到pyodbc游标中。您必须修改insert语句才能适应。祝你好运!