我正在尝试使用 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