python pandas to SQL server Ошибка перегрузки столбцов - PullRequest
0 голосов
/ 28 октября 2018

я пытаюсь этот код

df = pandas.read_sql_table(details)
df.to_sql(details)

, что означает, что я пытался взять таблицу и просто положить ее обратно в SQL под новым именем, и я попытался сделать некоторые манипуляции с таблицей, но все же я получилта же ошибка:

programmingError
\sqlalchemy\engine\base.py in _execute_context(self , dialect , constructor , statement , parameters , *args)
line 1192     parameters ,
line -> 1193     context)
line 1194     except BaseException as e

..\enging\defaulte.py
line 506 def do_execute(self , cursor , statment , parmetrs , context)
line 507 cursor.execute(statment , parametrs)

и ошибка программирования: ('в параметрах SQL указано 12366 параметров, но указано 77902 параметра', 'HY000')

и

DBAPIError :(pyodoc.Error) ('[07002] [Microsoft][SQL Server Native Client 11.0]COUNT field incorrect or syntax error (0) (SQLExecDirectw) [SQL : 'INSERT INTO [testName] ([index] , [col1] , [col2] ... [colN]) VALUES (? , ? , ? ,...?) , (? , ? , ? ,...?) , (? , ? , ? ,...?) , (? , ? , ? ,...?) ... (? , ? , ? ,...?)]')
the number of ? , ? is N times as the col number and the (? , ? , ? ,...?) is as the number of the rows.

когда я попробовал один и тот же код на меньшей таблице или когда я разделил эту таблицу на две таблицы с меньшими 7 столбцами, это загружается и обновляется отлично.

1 Ответ

0 голосов
/ 28 октября 2018

Я предполагаю, что вы установили внутреннее ограничение на количество параметров связывания в операторе SQL в SQL Server или в драйвере, который использовался для подключения к нему.Интересно, что 77902 - 12366 == 65536 == 2**16, что заставляет меня думать, что где-то переполнено 16-разрядное целое число.

К счастью, в методе to_sql, кажется, есть параметр, который можно использовать для разбиения операторов SQL на кускивместо того, чтобы отправить лот за один раз.Из документации Pandas для to_sql:

chunksize : int, необязательно

Ряды будутнаписано партиями такого размера за раз.По умолчанию все строки записываются одновременно.

Общее количество параметров (77902) разлагается на 2 × 11 × 3541, причем 3541 - простое число.Похоже, ваша таблица имеет 11 столбцов и 7082 строки или 22 столбца и 3541 ряд.Чтобы избежать этой ошибки, я бы рекомендовал оставить количество параметров связывания в чанке ниже 32767 на тот случай, если 16-разрядное целое число, которое, как я подозреваю, вызывает эту проблему, подписано, поэтому chunksize=1000, вероятно, будет работать для вас.В то же время, однако, это вряд ли даст гораздо более высокую производительность, чем chunksize=100, поэтому не стоит тратить так много времени, пытаясь найти самый большой размер блока, который будет работать.

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