pyodbc Python ODBC ブリッジのサポート
pyodbc Python ODBC ブリッジのサポート
pyodbc は、DB API 2.0 仕様 (PEP 249 -- Python Database API Specification v2.0Opens in a new tab) を実装し、ODBC を活用して基盤となるデータベースにアクセスするオープン・ソース Python モジュールです。インターシステムズでは、リレーショナル・パラダイムを使用して Python からデータベースにアクセスする手段として、pyodbc の使用をサポートしています。このモジュールは、前のバージョンの InterSystems IRIS でも使用できます。一般情報は、pyodbc の GitHub サイトOpens in a new tabを参照してください。
DB API 2.0 のインターシステムズ固有の実装が InterSystems IRIS 2022.1 で導入されており ("Native SDK for Python の使用法" の “Python DB-API の使用法” を参照)、これをすべての新しい Python 開発で使用することが推奨されています。pyodbc 実装は引き続きサポートされ、古いバージョンの InterSystems IRIS に接続するクライアント・アプリケーションで必要となる場合があります。
インストール
Windows 向けおよび Linux および関連オペレーティング・システム向けのインストール情報が掲載されているサイトがいくつかあります。
-
pyodbc の GitHub サイト : pyodbc Python ODBC bridgeOpens in a new tab
-
pyodbc Wiki : Wiki HomeOpens in a new tab
-
Microsoft 製品への pyodbc のインストール : Python SQL Driver - pyodbcOpens in a new tab
-
一般的な Python のドキュメント : PythonOpens in a new tab
インストール手順はシンプルです。
-
Python ダウンロード・ページOpens in a new tabから Python 2 または 3 (Unicode をサポート) をインストールします。
-
パスに Python を含むコンソールから、以下を実行します。
pip install pyodbc
macOS X へのインストール
macOS X へのインストールは、UNIX® プラットフォームとほぼ同じです ("Python Releases for Mac OS XOpens in a new tab" を参照)。
-
homebrewOpens in a new tab をインストールします。
-
unixODBCOpens in a new tab をインストールします。
-
pip install を実行します。
pip install --upgrade --global-option=build_ext --global-option="-I/usr/local/include" --global-option="-L/usr/local/lib"
テスト・プログラム
以下のテスト・プログラムは、pyodbc を使用して InterSystems IRIS データベースにアクセスする方法を示しています。InterSystems ODBC ドライバでサポートされる接続キーワードを示した例については、“ODBC 初期化ファイルの構造” を参照してください。
import pyodbc
import time
input("Hit any key to start")
dsn = 'IRIS Samples'
server = '127.0.0.1'
database = 'USER'
username = '_SYSTEM'
password = 'SYS'
#cnxn = pyodbc.connect('DRIVER={InterSystems ODBC35};SERVER='+server+';
# PORT='+port+'; DATABASE='+database+';UID='+username+';PWD='+ password)
cnxn = pyodbc.connect('DSN='+dsn+';')
lowptr=cnxn.getinfo(127)
highptr=cnxn.getinfo(136)
#value = PyLong_FromUnsignedLongLong(lowptr)
#print("%#5.8x"% (value))
print ("Connection high pointer: ")
print (format(highptr, '02x'))
print ("Connection high pointer: ")
print("%#5.8x"% (highptr))
print ("Connection low pointer: ")
print("%#5.8x"% (lowptr))
cursor = cnxn.cursor()
start= time.perf_counter()
#Sample select query
cursor.execute("SELECT * from Sample.Person")
row = cursor.fetchone()
#while row:
# print(row)
# row = cursor.fetchone()
end= time.perf_counter()
print ("Total elapsed time: ")
print (end-start)
input("Hit any key to end")
以下のように変更することで、Unicode データが返されなくなり、UTF-8 データが直接返されます。
cnxn.setdecoding(pyodbc.SQL_CHAR, encoding='latin1')
cnxn.setencoding(str, encoding='latin1')
ここでは、対象を絞ったドライバを使用することで、ドライバ・マネージャが UCS-2 または UCS-4 の Unicode を使用するのを回避すると共に、特定のドライバ・マネージャの構築方法に合ったドライバを提供することによる複雑さを回避します。他の Unicode オプションについては、pyodbc Wiki の Unicode のセクションOpens in a new tabを参照してください。