Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Tipo de parâmetro inválido (numpy.int64) ao inserir linhas com executemany()


Seu problema não é com o volume de dados per se , é que algumas de suas tuplas contêm numpy.int64 valores que não podem ser usados ​​diretamente como valores de parâmetro para sua instrução SQL. Por exemplo,
a = numpy.array([10, 11, 12], dtype=numpy.int64)
params = (1, 1, a[1], 1, 1, 1)
crsr.execute(sql, params)

vai jogar

porque o terceiro valor do parâmetro é um numpy.int64 elemento da sua matriz numpy a . Convertendo esse valor com int() evitará o problema:
a = numpy.array([10, 11, 12], dtype=numpy.int64)
params = (1, 1, int(a[1]), 1, 1, 1)
crsr.execute(sql, params)

Aliás, o motivo
sql = 'SET GLOBAL max_allowed_packet=50*1024*1024'
cursor.execute(sql)

não funcionou é que max_allowed_packet é uma configuração do MySQL que não tem nenhum significado para o Microsoft SQL Server.