python – 使用executemany()插入行时出现“无效的参数类型”(nu
我尝试将一堆数据插入数据库
insert_list = [(1,1,1),(2,2,2),(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)
减少到100元组: 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()之前,它有一个错误:
我是怎么解决这个问题的 谢谢. 解决方法
您的问题不在于数据量本身,而是您的某些元组包含numpy.int64值,这些值不能直接用作SQL语句的参数值.例如,
a = numpy.array([10,11,12],dtype=numpy.int64) params = (1,a[1],1) crsr.execute(sql,params) 会扔
因为第三个参数值是numpy数组a中的numpy.int64元素.使用int()转换该值将避免此问题: a = numpy.array([10,int(a[1]),params) 顺便说一句,原因 sql = 'SET GLOBAL max_allowed_packet=50*1024*1024' cursor.execute(sql) 没有用的是max_allowed_pa??cket是MySQL设置,对Microsoft SQL Server没有任何意义. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |