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)
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_packet是MysqL设置,对Microsoft sql Server没有任何意义.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。