Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Type de paramètre non valide (numpy.int64) lors de l'insertion de lignes avec executemany()

Votre problème n'est pas lié au volume de données en soi , c'est que certains de vos tuples contiennent numpy.int64 valeurs qui ne peuvent pas être utilisées directement comme valeurs de paramètre pour votre instruction SQL. Par exemple,

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

lancera

car la troisième valeur de paramètre est un numpy.int64 élément de votre tableau numpy a . Conversion de cette valeur avec int() évitera le problème :

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

Au fait, la raison pour laquelle

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

n'a pas fonctionné, c'est que max_allowed_packet est un paramètre MySQL qui n'a aucune signification pour Microsoft SQL Server.