初めに
以前の投稿で、「Db2 on IBM Cloud に Pythonからつなぐ(Select編)」という投稿をし、Pythonから「ibm_db」モジュールを使用して、SQL文でデータを取得する記事を投稿しましたが、今回はORMライブラリであるSQLAlchemyでデータを取得する方法をご紹介します。
前提
Db2上に以下のテーブルがあることを前提としています。
テーブル名:users
id | name | |
---|---|---|
1 | Taro | taro@test.local |
2 | Hanakano | hanako@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の場合もあります。