сбой python при использовании fast_executemany как TRUE с Sql Server - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь импортировать данные из SourceDB в TargetDB. В соответствующей таблице только 15000 строк и занимает около 20 минут с fast_executemany как False

но когда я установил fast_executemany в значение true, мой интерпретатор python потерпел крах на cursorTarget.executemany (SQL1, data)

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()

1 Ответ

0 голосов
/ 08 марта 2019

Эта проблема все еще расследуется.Тем временем вы можете продолжить, используя более новый драйвер ODBC, такой как DRIVER = ODBC Driver 13 для SQL Server, и запустив pip install pyodbc == 4.0.22, чтобы использовать более раннюю версию pyodbc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...