Синтаксическая ошибка с параметризованными запросами после переключения с pyodbc на pymssql
У меня есть необработанные файлы размером 13-15 МБ для загрузки их данных в БД, и для вставки около 30-35 000 строк требуется около 50-55 минут, используя executemany с pyodbc, и все работало нормально, но время обработки было высоким.
Для тестирования производительности я попробовал pymssql, но он показывает синтаксическую ошибку здесь
x = [('a',1),('b',2).... ] # inserting only 999 rows at a time
qry = "INSERT INTO ["+tablename+"] VALUES({}) ".format(placeholders)
cursor.executemany(qry,x)
print qry
# INSERT INTO [my_T] VALUES(?,?,?,?,?,?,?,?,?,?,?,?...)
AT executemany() это ошибка
Ошибка:
Ошибка в loadData (102, "Неверный синтаксис рядом с"? ". Сообщение об ошибке DB-Lib 20018, серьезность 15:\n Общая ошибка SQL Server: проверка сообщений от SQL Server\n"
1 ответ
Спецификация Python DB-API 2.0 определяет несколько стилей параметров, которые могут использовать разработчики.
pyodbc принял стиль "qmark", который является наиболее распространенным стилем для ODBC
INSERT INTO tablename (col1, col2) VALUES (?, ?)
в то время как pymssql выбрал стиль "формат"
INSERT INTO tablename (col1, col2) VALUES (%s, %s)
Обратите внимание, что по историческим причинам pymssql поддерживает %d
так же как %s
но нам не нужно использовать %s
для строк и %d
для номеров; %s
работает во всех случаях и является предпочтительным заполнителем.