pyodbc.row对象转换为数据库中的实际值

xtfmy6hx  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(826)

我正在尝试使用pyobdc从ibmi系列服务器(以前是as400)中提取数据。我使用的是obdc数据源管理器和iseries访问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

zdwk9cvp

zdwk9cvp1#

我换了连接线,把一切都修好了。我要加的就是:translate=1

conn = pyodbc.connect('DRIVER={iSeries Access ODBC Driver};system=SERVER;TRANSLATE=1;UID=USER;PWD=PASS')

相关问题