我尝试将一堆数据插入数据库
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: (‘无效的参数类型。param-index=4 param-type=numpy.int64’, ‘HY105’)
减少到 100 个元组:
cursor.executemany(sql, insert_list[:100])
cursor.executemany(sql, insert_list[:100])
pyodbc.ProgrammingError: (‘无效参数类型。param-index=4 param-type=numpy.int64’, ‘HY105’) cursor.executemany(sql, insert_list[:100])
减少到 5 个元组:
cursor.executemany(sql, insert_list[:5])
conn.commit()
这可以插入到数据库
我尝试:
sql = 'SET GLOBAL max_allowed_packet=50*1024*1024'
cursor.execute(sql)
在 excutemany() 之前,但它有一个错误:
pyodbc.ProgrammingError: (‘42000’, “[42000] [FreeTDS][SQL Server]‘GLOBAL’ 不是可识别的 SET 选项。(195) (SQLExecDirectW)”)
我是如何解决这个问题的。
谢谢你。
原文由 YONG BAGJNS 发布,翻译遵循 CC BY-SA 4.0 许可协议
您的问题不在于数据 _量本身_,而是您的某些元组包含
numpy.int64
不能直接用作 SQL 语句参数值的值。例如,会扔
因为第三个参数值是
numpy.int64
numpy 数组中的元素a
。使用int()
转换该值将避免该问题:顺便说一句,原因是
不起作用的是
max_allowed_packet
是一个 MySQL 设置,对 Microsoft SQL Server 没有任何意义。