pyobdc を使用して IBM i シリーズ サーバー (以前の AS400) からデータを取得しようとしています。OBDC Data Source Administrator と iSeries Access ODBC Driver を使用しています。コードは次のとおりです。
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 オブジェクトです。私はインターネットを高低で検索しましたが、私の問題を解決するものは何も見つかりません。
社内のシステム開発者の 1 人は、OBDC 管理者に何らかの設定を変更する必要があるかもしれないと言っていましたが、すべてが適切に設定されているようです。
以下は、OBDC 管理者のスクリーンショットと、ドライバーのセットアップ方法です。
pyodbc.Row オブジェクトをデータベース内に含まれる実際の値に変換する方法はありますか? それとも、私が見逃しているものがありますか?
私が試してみました:
rows[0].TEST
それでも pyodbc.Row オブジェクトを返します。私がやりたいのは、pyodbc.Row オブジェクトではなく、サーバーから取得した実際の値を返すことだけです。
私が使用する場合:
c1.description
私は得る:
(('TEST', <class 'bytearray'>, None, 15, 15, 0, False),)
取得する必要がある実際の値は次のとおりです: 005911