"Ungültiger parameter "Typ" (numpy.int64) beim einfügen von Zeilen mit executemany()
Ich versuche, einfügen Haufen Daten in die Datenbank
insert_list = [(1,1,1,1,1,1),(2,2,2,2,2,2),(3,3,3,3,3,3),....] #up to 10000 tuples in this list
conn = pyodbc.connect('DRIVER={FreeTDS};SERVER=xxxxx;DATABASE=xxxx;UID=xx;PWD=xx;TDS_Version=7.0')
cursor = conn.cursor()
sql = "insert into ScanEMAxEMAHistoryDay(SecurityNumber, EMA1, EMA2, CrossType, DayCross, IsLocalMinMax) values (?, ?, ?, ?, ?, ?)"
cursor.executemany(sql, insert_list)
cursor.executemany(sql, insert_list)
pyodbc.ProgrammingError: ('Invalid parameter type. param-index=4 param-type=numpy.int64', 'HY105')
reduzieren zu 100 Tupel:
cursor.executemany(sql, insert_list[:100])
cursor.executemany(sql, insert_list[:100])
pyodbc.ProgrammingError: ('Invalid parameter type. param-index=4 param-type=numpy.int64', 'HY105')
cursor.executemany(sql, insert_list[:100])
reduzieren zu 5-Tupeln:
cursor.executemany(sql, insert_list[:5])
conn.commit()
Kann dies einfügen um die Datenbank
Ich versuche:
sql = 'SET GLOBAL max_allowed_packet=50*1024*1024'
cursor.execute(sql)
bevor excutemany (), aber Sie haben einen Fehler:
pyodbc.ProgrammingError: ('42000', "[42000] [FreeTDS][SQL Server]'GLOBAL' ist nicht ein anerkanntes SET-option. (195) (SQLExecDirectW)")
Wie ich dieses Problem lösen.
Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein problem nicht mit der Menge der Daten per se, es ist, dass einige Ihrer Tupel enthalten
numpy.int64
Werte können nicht direkt verwendet werden als Parameterwerte für die SQL-Anweisung. Zum Beispiel,werfen
weil der Wert des Dritten Parameters ist ein
numpy.int64
element aus Ihrer numpy-arraya
. Die Umwandlung dieser Wert mitint()
vermeiden Sie das Problem:Durch die Art und Weise, der Grund dafür, dass
nicht funktioniert ist, dass
max_allowed_packet
ist eine MySQL-Einstellung, die keine Bedeutung hat für Microsoft SQL Server.df.values.tolist()
- und es funktionierte für mich. Wenn Sie weitere Unterstützung benötigen, sollten Sie eine neue Frage stellen.