使用python转换来自db2查询的字节数组信息

时间:2013-11-15 19:56:35

标签: python sql bytearray ibm-midrange db2-400

我正在使用iSeries Access ODBC驱动程序尝试针对DB2 for i运行查询。我想让这些信息更具可读性。如何使用python转换字节数组信息?以下示例输出:

>>> cursor.execute("SELECT * FROM QAAPFILE$") 
<pyodbc.Cursor object at 0x00C6D2C0>
>>> for row in cursor:
...     print row         


Example Output:
(1, bytearray(b'\xfd@@@@@@@@@'), 1, 1, 8, 9, bytearray(b'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'), bytearray(b'@@@@@@@@@@@@@@@@@@@@'), bytearray(b'\x00<\x02\x82B\x02\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'))
Many more rows

1 个答案:

答案 0 :(得分:2)

我不确定你为什么要查看QAAPFILE $,我不确定从中检索的数据是否必须检索为bytearray。但是如果你绝对必须读取原始字节,那么你需要知道的第一件事是IBM i(AS / 400,iSeries等)本身就是EBCDIC。 '@'是一个需要使用decode('cp037')的标志。在代码页37(标准美国EBCDIC,您可能需要针对不同的语言环境稍微调整),空格是'\ x40',恰好与ASCII或UTF-8中的'@'相同。

现在,我要说你给出的样本不能很好地解码,所以不幸的是故事更多。像评论者一样,我需要更多信息。 (例如,为什么你需要查看QAAPFILE $仍然真的很神秘。而且,为了记录,我从未见过或使用过该文件。我已经使用pyODBC多次连接到i,而且我已经从来没有使用bytearray。)

编辑:我现在有机会在我工作的机器上查看QAAPFILE $,我可以告诉你,你不会在其中找到可读的字母数字字符。好吧,第二列(行元组中的第一个bytearray元素)实际上是可读的,具有正确的解码,但最后一个确实不是,甚至没有使用本机接口直接在服务器上查看它。它实际上只是二进制数据。我无法想象你对这个文件有什么用处。