1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Posted at

初めに

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

前提

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

id name email
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の場合もあります。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?