Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Tipo di parametro non valido (numpy.int64) quando si inseriscono righe con executemany()

Il tuo problema non è con il volume di dati di per sé , è che alcune delle tue tuple contengono numpy.int64 valori che non possono essere utilizzati direttamente come valori di parametro per l'istruzione SQL. Ad esempio,

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

lancerà

perché il terzo valore del parametro è un numpy.int64 elemento dal tuo array numpy a . Conversione di quel valore con int() eviterà il problema:

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

A proposito, il motivo per cui

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

non ha funzionato è che max_allowed_packet è un'impostazione MySQL che non ha alcun significato per Microsoft SQL Server.