ブログ

SQLAlchemy を使用して IBM Db2 を操作する

初めに

以前の投稿で、「Db2 on IBM Cloud に Pythonからつなぐ(Select編)」という投稿をし、Pythonから「ibm_db」モジュールを使用して、SQL文でデータを取得する記事を投稿しましたが、今回はORMライブラリであるSQLAlchemyでデータを取得する方法をご紹介します。

前提

Db2上に以下のテーブルがあることを前提としています。
テーブル名:users

idnameemail
1Tarotaro@test.local
2Hanakanohanako@test.local

手順

1. 必要なモジュールのインストール

$ pip3 install ibm_db ibm_db_sa sqlalchemy

※環境によってはpip3ではなく、pipの場合もあります。

2. ソースファイルの作成

ソースの中身はコメント行を参考にしてください。db2.py

import sqlalchemy
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
import ibm_db_sa

# Db2 接続情報定義
# xxxxxは環境に合わせて置き換えてください。
user = "xxxxxx"
password = "xxxxx"
host = "xxxxx"
port = "xxxxx"
database = "xxxxx"

# Engineの作成
engine = create_engine(f'ibm_db_sa://{user}:{password}@{host}:{port}/{database};Security=SSL')

# Sessionの作成
session = scoped_session(
    sessionmaker(
        autocommit = False,
        autoflush = False,
        bind = engine
    )
)

# モデル定義
Base = declarative_base()
Base.query  = session.query_property()

class User(Base):
    __tablename__ = 'users'
    id = Column('id', Integer, primary_key = True)
    name = Column('name', String(50))
    email = Column('email', String(50))

# main関数
def main():
    # データ取得
    users = session.query(User).all()
    for user in users:
        print(f'user: {user.name}, email: {user.email}')

if __name__ == "__main__":
    main()

3. ソースファイルの実行

$ python3 db2.py
user: Taro, email: taro@test.local
user: Hanakao, email: hanako@test.local

※環境によってはpython3ではなく、pythonの場合もあります。

pagetop