sql >> Base de Datos >  >> RDS >> Sqlserver

Tipo de parámetro no válido (numpy.int64) al insertar filas con executemany()

Su problema no es con el volumen de datos per se , es que algunas de tus tuplas contienen numpy.int64 valores que no se pueden usar directamente como valores de parámetro para su instrucción SQL. Por ejemplo,

a = numpy.array([10, 11, 12], dtype=numpy.int64)
params = (1, 1, a[1], 1, 1, 1)
crsr.execute(sql, params)

lanzará

porque el valor del tercer parámetro es un numpy.int64 elemento de su matriz numpy a . Convirtiendo ese valor con int() evitará el problema:

a = numpy.array([10, 11, 12], dtype=numpy.int64)
params = (1, 1, int(a[1]), 1, 1, 1)
crsr.execute(sql, params)

Por cierto, la razón por la que

sql = 'SET GLOBAL max_allowed_packet=50*1024*1024'
cursor.execute(sql)

no funcionó es que max_allowed_packet es una configuración de MySQL que no tiene ningún significado para Microsoft SQL Server.