この記事では、2023年3月1日~31日の期間に開催された「技術文書ライティングコンテスト:InterSystems IRISチュートリアル」に応募された24作品の中から、Open Exchangeに公開されている sqlalchemy-iris を利用してPythonとSQLでIRISのデータを操作する方法を投稿された Heloisa Paivaさんの記事をご紹介します。
Open Exchangeは、世界各地にいる開発者コミュニティメンバーが開発したインターシステムズ製品で利用できるサンプルアプリが登録されているページで、自由にダウンロードしてご利用いただけます。
Heloisaさんの記事のように公開されている Open Exchange の利用例があると、「ちょっと使ってみたいな・・」と思われているメンバーの方への情報共有ができてとても有用な記事になると思います!丁度日本で初開催の「技術文書ライティングコンテスト」開催中ですので、ぜひ使用例や感想など、投稿してみてください!💪
はじめに
過去の記事で、IRISとPythonの型に関する記事を投稿しましたが、オブジェクトにアクセスする方法は簡単ではないことが明らかです。
幸運なことに、Open Exchange に公開されている SQLAlchemy-iris を利用すればオブジェクトにアクセスするために必要な作業が既に完了しているので、PythonからIRISのオブジェクトへのアクセスがより簡単になりました。
この記事では、SQLAlchemy-iris の利用例をご紹介します。
SQLAlchemy-iris を開発された @Dmitry Maslennikov さん、ありがとう!
インストール方法
管理者権限でターミナルを開き、次のように入力します。
pip install sqlalchemy-iris
Shell SessionShell Session
必要に応じて、前提条件となる機能もインストールされます。
使用方法
これで、Pythonファイルにモジュールをインポートし、データベースに接続し、好きなようにsqlalchemyを利用できます。よろしければ以下お試しください。
- sqlalchemyから "create_engine" をインポートし、IRISへの接続文字列 "iris://username:password@IP:port/namespace" を利用してエンジンオブジェクト(engine)を作成します。もちろん、モジュール全体をインポートすることもできますが、 "create_engine" では、Engine (sqlalchemy.engine :詳細は こちら) のインスタンスを作成し、以下のご紹介する作業で使用する必要なサブクラスをすべて含んでいます。
from sqlalchemy import create_engine
engine = create_engine("iris://_SYSTEM:SYS@localhost:1972/SAMPLE")
PythonPython
- 接続( sqlalchemy.engine.connection:詳細は こちら)インスタンスを作成します。このインスタンスを使用してトランザクションや単純な実行などが行えます。
conn = engine.connect()
PythonPython
素晴らしい!これでデータベースへのアクセス設定は完了です。
シンプルなSELECT文を実行します。結果セットを繰り返し処理するには、次のようにします(例として、別の記事で作成したテーブルを利用しています)
query = 'SELECT Name, Age from Sample.PersistentData WHERE Age >=21'
result = conn.exec_driver_sql(query)
PythonPython
この実行で、result には、CursorResult(sqlalchemy.engine.CursorResult)が設定されます。CursorResultでできることについてはオフィシャルドキュメントで確認できます。
CursotResultを利用したシンプルな繰り返し処理は以下の通りです。
print("Name, Age")
for row in result:
print(row[0], ", ", row[1])
PythonPython
少し書式を変えれば、次のような結果が得られます。
詳細は、オフィシャルドキュメントもぜひご覧ください。
追記:sqlalchemyから"text"をインポートすると、次のようにクエリを実行することもできます。
result = conn.execute(text(query))
PythonPython
上述した結果と同様の結果が得られます。
結論
DDLとその他DML文も実行できますし、ORM(Object Relationalマッピング)と連携するためのサポートも充実しています。この記事では簡単な利用例をご紹介するだけでしたが、この他の利用例については、ぜひ皆さんからの投稿をお待ちしてます!