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

Sql server 如何使用pyodbc将psycopg2中的结果集插入SQL表?,sql-server,postgresql,python-3.x,psycopg2,pyodbc,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) sqlconn

我有一个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)
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 Server预定义表中:

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)
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)
这是将第一个结果集的结果传递到第二个结果集的insert的方法吗

现在,为了在使用实际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)
但是,它似乎只是覆盖了表中已有的数据


<>我需要追加吗?

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

conngre = psycopg2.connect("host='blah' port='blah' dbname='blah' user='blah' password='blah'", cursor_factory=psycopg2.extras.RealDictCursor)
curgre = conngre.cursor()

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

with open('exportgre', 'r') as selectexport:
    var1 = selectexport.read()
    curgre.execute(var1)
    rows = curgre.fetchall()
    for row in rows:
        cursql.execute('INSERT INTO table_name (col1, col2, col3) VALUES (?, ?, ?)', (row[0], row[1], row[2]))

对于“selectexport”中的每个SELECT语句,这将运行查询,并在行上循环。对于每一行,它都将插入pyodbc光标。您必须修改insert语句以适应。祝你好运

嗨,FlipperPA很抱歉,今天下午我要做的事耽搁了。这会为每行创建一个SQL事务吗?或者它会整理完整的字典,然后一次执行所有的数据集,我的数据集大约有12000行,因此无法按顺序执行12000个查询。这将执行12000个插入查询。您可以使用pyodbc中的
executemany
,也可以使用
execute
。您好FlipperPA我用代码编辑了我的问题,因为我的postgre连接当前不可用,我尝试测试pyodbc到pyodbc的代码。您能提供一个在
exportgre
importsql
中运行的SQL查询示例吗文件夹?我不确定你所说的两个文件是如何解决这个问题的。如果我试图从PostreSQL读取数据并写入SQL Server,我只需要从PostgreSQL中选择行,循环它们,然后在不使用任何文件的情况下将所需内容插入SQL Server。PostgreSQL
fetchmany
方法可用于一次获取一定数量的行,并使用SQL Server
ExecuteMy
生成单个插入。我不能将确切的列作为公司敏感列包含在内,但是这些表是类似的,但在SQL表的开头会有一个日期提取列。