我正在尝试将数据从SourceDB导入TargetDB。相应的表中只有15000行,如果fast\u executemany为False,则大约需要20分钟
但是当我将fast\u executemany设置为true时,我的python解释器崩溃了游标目标执行(SQL1,数据)
def ImportFunction(TargetServer,TargetDB,TargetTable,SourceServer,SourceDB,SourceTable,SQL,TCID) :
connectionStringSource = 'DRIVER={SQL Server Native Client 11.0};SERVER='+SourceServer+';DATABASE='+SourceDB+';Trusted_Connection=yes;'
connectionStringTarget = 'DRIVER={SQL Server Native Client 11.0};SERVER='+TargetServer+';DATABASE='+TargetDB+';Trusted_Connection=yes;'
connectionSource = pyodbc.connect(connectionStringSource)
connectionTarget = pyodbc.connect(connectionStringTarget)
cursorSource = connectionSource.cursor()
cursorTarget = connectionTarget.cursor()
cursorSource.execute(SQL)
rowspart = []
while True :
itrcount = 1
rowspart = cursorSource.fetchmany(100)
if not rowspart :
break
#break while loop
data = rowspart
connectionSource1 = pyodbc.connect(connectionStringSource)
cursorSource1 = connectionSource1.cursor()
rest = cursorSource1.execute("SELECT * FROM "+SourceTable+" WHERE 1=0")
columnList = [tuple[0] for tuple in rest.description]
String = ','.join(str(e) for e in columnList)
StringSQL = "?, " * (len(columnList)-1)
StringSQL = StringSQL+"?"
StringSQL = " ) VALUES("+StringSQL+ ")"
SQL1 = "insert into " + TargetTable + " ( "+ String + StringSQL
if len(rowspart) > 50 :
cursorTarget.fast_executemany = True
else :
cursorTarget.fast_executemany = False
try:
cursorTarget.executemany(SQL1, data)
except Exception as e:
print 'error: ' + str(e)
#break
itrcount = itrcount + 1
del rowspart[:]
cursorSource1.close()
del cursorSource1
connectionSource1.close()
connectionTarget.commit()
cursorSource.close()
del cursorSource
connectionSource.close()
cursorTarget.close()
del cursorTarget
connectionTarget.close()
这个问题仍在调查中。同时,您可以继续使用更新的ODBC驱动程序,如driver=ODBC driver 13 for SQL Server,以及 运行pip install pyodbc==4.0.22以使用早期版本的pyodbc。你知道吗
相关问题 更多 >
编程相关推荐