3

这是我在这个论坛的第一个问题。我是python的初学者。

问:我正在尝试从表中检索 DB2 (IBM I) 数据并写入 Excel 工作表 (.xls)。要获取数据,我使用 pyodbc 并写入 excel,使用 xlwt 模块。Col4 包含汉字。我知道 col4 CCSID 是 935 并且 pyodbc 从 DB 中检索数据,但是当我将此值写入 excel 表时,它会抛出以下错误消息。如果我打印它,下面是来自 dset1 的数据。如何将其写入excel而没有任何问题?

0(十进制('6331840'),'RUBO','587','\x0e\xa3\x1a\x1a\x1a',十进制('175'),十进制('3716'))1(十进制('6331841 '), 'RUBO', '587', '\x0e\xa3\x1a\x1a\x1a', 十进制('24'), 十进制('340')) 2 (十进制('6331842'), 'RUBO' , '587', '\x0e\xa3\x1a\x1a\x1a', 十进制('100'), 十进制('1821'))

File "C:\Python27\Tools\john\EOD_CMR report.py", line 82, in <module>
    sh.write(n, i, val)
  File "C:\Python27\lib\site-packages\xlwt\Worksheet.py", line 1030, in write
    self.row(r).write(c, label, style)
  File "C:\Python27\lib\site-packages\xlwt\Row.py", line 259, in write
    raise Exception("Unexpected data type %r" % type(label))
Exception: Unexpected data type <type 'pyodbc.Row'>


import pyodbc
import os
import sys, traceback
import xlwt

#initiate excel
book = xlwt.Workbook()
sh = book.add_sheet('sheet1')
#get today date YYYYMMDD
now = datetime.datetime.now() # get today's date
today = str(now.year) + str(now.month).zfill(2) + str(now.day).zfill(2)
#SQL statement
sql1 = """SELECT col1, col2, col3, trim(col4)FROM lib.file WHERE date = %s""" % today

con_string = "Driver={iSeries Access ODBC Driver};System=veet;Database=veet;UID=" + user_id + ";pwd=" + password + ";SSL=YES;unicode_results=True"

cnxn = pyodbc.connect(con_string)
cur = cnxn.cursor()
# get the data
dset1 = cur.execute(sql1).fetchall()
cur.close()

# to write column name
x = ['Packlist', 'Carrier', 'Hub', 'City', 'Carton amount', 'DU']
n = 0
for i, hdr in enumerate(x):
        sh.write(n,i,hdr)
for i, val in enumerate(dset1):
        n+=1
        sh.write(n, i, val)
name = today + 'xls'
book.save(name)

问题更新:我终于解决了这个问题。下面是隐藏的错误.. 1. 第一个技巧是在 ODBC 驱动程序本身中使用 Microsoft unicode value = CCSID 1386 对检索到的数据进行编码..

con_string = "Driver={iSeries Access ODBC Driver};System=veet;Database=veet;UID=" + user_id + ";pwd=" + password + ";SSL=YES;unicode_results=True;CCSID=1386"

参考: http: //publib.boulder.ibm.com/infocenter/wmqv7/v7r0/index.jsp ?topic=%2Fcom.ibm.mq.csqzak.doc%2Ffr22370_.htm

  1. 第二是在工作簿启动期间使用 xlwt 解码此值,如下所示。

    book = xlwt.Workbook(encoding="gb2312")

参考:http ://docs.python.org/2/library/codecs.html#standard-encodings

谢谢大家给我一些指导

4

0 回答 0