python - 从 Excel 电子表格中提取的数据使用 Pyodbc 更新 SQL 表时出错

标签 python sql excel pyodbc

当运行以下 Python 2.7 脚本时,我得到一个 pyodbc.Error。我使用的 Excel 电子表格中有 4 行。

import pyodbc
from mmap import mmap,ACCESS_READ
import xlrd
import os

#for row_index in range(1,sheet0.nrows):

cnxn = pyodbc.connect('driver={DB};NetworkAddress=DB_Address,Port;Db=DB;uid=login;pwd=password')
cursor = cnxn.cursor()

book=xlrd.open_workbook("I:\\CNLD.xlsx")
sheet=book.sheet_by_index(0)
cell=sheet.cell(1,1)

for rownum in range(sheet.nrows):
    print sheet.row_values(rownum)

print sheet.nrows 

update_dyna = "insert into tempdb..cm_dyna(secsym,pvsym,min_bid_off,min_bid_offpt,min_ask_off,min_ask_offpt,max_bid_off,max_bid_offpt,max_ask_off,max_ask_offpt) values(?,?,?,?,?,?,?,?,?,?)"

for row_index in range(1, sheet.nrows):
    row_num         = row_index
    secsym          = sheet.cell(row_index,0).value
    pvsym           = sheet.cell(row_index,1).value
    min_bid_off     = sheet.cell(row_index,2).value
    min_bid_offpt   = sheet.cell(row_index,3).value
    min_ask_off     = sheet.cell(row_index,4).value
    min_ask_offpt   = sheet.cell(row_index,5).value
    max_bid_off     = sheet.cell(row_index,6).value
    max_bid_offpt   = sheet.cell(row_index,7).value
    max_ask_off     = sheet.cell(row_index,8).value
    max_ask_offpt   = sheet.cell(row_index,9).value
    values = (secsym,pvsym,min_bid_off,min_bid_offpt,min_ask_off,min_ask_offpt,max_bid_off,max_bid_offpt,max_ask_off,max_ask_offpt)
    cursor.execute(update_dyna,values)    

cursor.close()
cnxn.commit()
cnxn.close()

这是被踢出的错误信息:

cursor.execute(update_dyna,values)    
pyodbc.Error: ('HY000', '[HY000] [DataDirect][ODBC Sybase Wire Protocol driver]Data type for parameter 2 has changed since first SQLExecute call. (0) (SQLExecDirectW)')

cursor.execute 是循环的一部分,所以我不确定为什么我无法更新其中包含 4 行的电子表格。

最佳答案

错误消息告诉您,在对 cursor.execute 的一次调用和对下一次的调用之间,您得到了不同的数据类型 - 而 Sybase 不允许这样做。

一个快速的解决方法可能是在循环内提​​交事务。我没有方便的 Sybase 来测试它。

或者,将您的数据强制转换为正确的格式。我怀疑您混合使用了字符串、整数和 float 。但是您可以强制执行类似的操作:

min_bid_off     = float(sheet.cell(row_index,2).value)

关于python - 从 Excel 电子表格中提取的数据使用 Pyodbc 更新 SQL 表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19496963/

相关文章:

python - Django 中从 sqlite 迁移到 postgresql

mysql - GROUP BY 不返回每个特定字段的所有行

mysql - 根据外键获取最小值

c# - Excel Interop - 在一个范围内绘制所有边框

c++ - XLL 函数参数签名类型

用于捕获以逗号分隔的项目列表的 Python 正则表达式

python - for 循环中的 lambda 只取最后一个值

python (VTK) : Connect two 3D points by an oriented cylinder

sql - PostgreSQL - 从 2 列中选择具有复合最大值的行

excel - 合并两列中相邻行中具有相同数据的单元格