您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 使用executemany()插入行时出现“无效的参数类型”(numpy.int64)

5b51 2022/1/14 8:22:04 python 字数 4416 阅读 514 来源 www.jb51.cc/python

我尝试将一堆数据插入数据库 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_Vers

概述

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)

cursor.executemany(sql,insert_list)

pyodbc.ProgrammingError: (‘Invalid parameter type. param-index=4 param-type=numpy.int64’,‘HY105’)

减少到100元组

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])

减少到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’ is not a recognized SET option. (195) (sqlExecDirectW)”)

我是怎么解决这个问题的

谢谢.

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

会扔

ProgrammingError: (‘Invalid parameter type. param-index=2 param-type=numpy.int64’,‘HY105’)

因为第三个参数值是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没有任何意义.

总结

以上是编程之家为你收集整理的python – 使用executemany()插入行时出现“无效的参数类型”(numpy.int64)全部内容,希望文章能够帮你解决python – 使用executemany()插入行时出现“无效的参数类型”(numpy.int64)所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶