pymssql executemany вставить ошибку значения

Я получаю сообщение об ошибке:

Файл «pymssql.pyx», строка 443, в pymssql.Cursor.executemany (pymssql.c:6616) Файл «pymssql.pyx», строка 417, в pymssql.Cursor.execute (pymssql.c:6057) Файл «_mssql. pyx", строка 943, в _mssql.MSSQLConnection.execute_query (_mssql.c:9858) Файл "_mssql.pyx", строка 974, в _mssql.MSSQLConnection.execute_query (_mssql.c:9734) Файл "_mssql.pyx", строка 1091, в _mssql.MSSQLConnection.format_and_run_query (_mssql.c:10814) Файл "_mssql.pyx", строка 1113, в _mssql.MSSQLConnection.format_sql_command (_mssql.c:11042) Файл "_mssql.pyx", строка 1797, в _mssql ._substitute_params (_mssql.c:18646) ValueError: больше заполнителей в sql, чем доступно параметров

при выполнении массовой вставки в таблицу mssql (executemany). Вставка одних и тех же данных в один оператор выполнения, а также в студию управления mssql работает нормально.

Я пробовал выполнить executemany (данные) со словарем и кортежем - тот же результат.

Код:

cursor.executemany("insert table Values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", (data))

Любые идеи?


person Synal    schedule 28.07.2014    source источник
comment
Можете опубликовать результаты print(len(data)) и print(set(map(len, data)))?   -  person Nigel Tufnel    schedule 28.07.2014
comment
len(data)==602 set(map(len,data)==set([11,12,13,15,16,17,18,19,20,21])   -  person Synal    schedule 28.07.2014
comment
см. мой обновленный ответ   -  person Nigel Tufnel    schedule 28.07.2014
comment
право, я должен был подумать об этом. Решено, спасибо!   -  person Synal    schedule 29.07.2014


Ответы (1)


Все подсписки/подкортежи в data должны иметь длину 21 (количество %s в вашем SQL-запросе).

Но. В вашем data также есть элементы длиной 11, 12, 13, 15, 16, 17, 18, 19 и 20. И вы получаете сообщение об ошибке more placeholders (meaning: %s) in sql than params (meaning: sublists in data) available

Чтобы исправить: проверьте, как вы генерируете data и безжалостно двадцать один элемент для каждого data.

person Nigel Tufnel    schedule 28.07.2014