0

我正在尝试使用 pyobdc 从 IBM i 系列服务器(以前的 AS400)中提取数据。我正在使用 OBDC 数据源管理器和 iSeries Access ODBC 驱动程序。这是代码:

import pyodbc
conn = pyodbc.connect('DRIVER={iSeries Access ODBC Driver};system=SERVER;UID=USER;PWD=PASS;unicode_results=True')
conn.setencoding('utf-8')
c1=conn.cursor()
c1.execute("""select TEST from TESTER.ITEMTEST where TEST='005911'""")
<pyodbc.Cursor object at 0x02A1F460>
rows = c1.fetchall()
print(rows[0])

这是返回的内容:

(b'\xf0\xf0\xf5\xf9\xf1\xf1@@@@@@@@@', )

根据我的阅读,这是一个 pyodbc.Row 对象。我在互联网上到处搜索,找不到任何能解决我问题的东西。

我们内部的一位系统开发人员说,也许我需要更改 OBDC 管理员中的某种设置,但一切似乎都设置正确。

以下是 OBDC 管理员的一些屏幕截图以及我如何设置驱动程序:

屏幕

有没有办法将 pyodbc.Row 对象转换为数据库中包含的实际值?还是我还缺少其他东西?

我努力了:

rows[0].TEST

它仍然返回一个 pyodbc.Row 对象。我想做的就是返回从服务器检索到的实际值,而不是 pyodbc.Row 对象。

当我使用:

c1.description

我得到:

(('TEST', <class 'bytearray'>, None, 15, 15, 0, False),)

我应该得到的实际值是:005911

4

1 回答 1

1

我改变了连接线,它修复了一切。我只需要添加:TRANSLATE=1

conn = pyodbc.connect('DRIVER={iSeries Access ODBC Driver};system=SERVER;TRANSLATE=1;UID=USER;PWD=PASS')
于 2020-07-23T19:49:49.490 回答