0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Db2でpandas.read_sql() を使用してpandas.DataFrameにSELECTの結果を入れる

Posted at

Db2でpandas.read_sql() を使用してpandas.DataFrameにSELECTの結果を入れる方法です。

Jupyter NotebookからDb2に簡単アクセスの「7. SELECTの結果セットのPythonの変数への代入」を使ってもできるのですが、前準備の説明が面倒なので、単に定型実行するだけならこっちがいいかな? と思い、メモとして書いておきます。

あと「Flask + SQLAlchemyでコネクションプールを使ってDb2に接続 & SQL実行(ORMなし)」でも同じような説明は書いていますが、Flask中心なので、抜き出して説明します。

前準備: 必要モジュールの導入

必要なモジュールが未導入の場合は、以下のコマンドでインストールします。

pip install ibm_db ibm_db_sa sqlalchemy pandas

1. 手順

1. SQLAlchemyのDb2接続URLの作成

以下になります。({}はDbの接続情報で置き換えます):

ibm_db_sa://{username}:{password}@{hostname}:{port}/{database};

SSL接続の場合は最後にSECURITY=SSL;を付加します。

ibm_db_sa://{username}:{password}@{hostname}:{port}/{database};SECURITY=SSL;

パスワードに @ などの特殊文字が含まれていると正しく動作しないため、URLエンコードが必要です。
参考: Escaping Special Characters such as @ signs in Passwords
以下は、パスワード「kx@jj5/g」を含むURLの例です。「at」記号とスラッシュ文字は、それぞれ%40と%2Fとして表現されます:

from urllib.parse import quote_plus

password = quote_plus("kx@jj5/g")
print(password)

出力:

kx%40jj5%2Fg

2. SQLAlchemyのエンジンを作成

engine = create_engine(url)でSQLAlchemyのエンジンを作成します

engine = create_engine(url)

3. 作成したエンジンを指定してpd.read_sqlを実行

sql_str = "SELECT * FROM EMPLOYEE"
df_emp = pd.read_sql(sql_str, engine)

2. サンプルコード

from sqlalchemy import create_engine
from urllib.parse import quote_plus

# DB2の接続情報を設定
database = "BLUDB"
username = "user01"
password = quote_plus("p@ssw0rd")
hostname =  "aaa-bbb.cloud.ibm.com"
port =  "50001"

# SQLAlchemyのエンジンを作成
url = f"ibm_db_sa://{username}:{password}@{hostname}:{port}/{database};SECURITY=SSL;"
engine = create_engine(url)

# pandas.read_sql() を使用して pandas.DataFrame 型の df_emp に SELECT の結果を格納
sql_str = "SELECT * FROM EMPLOYEE"
df_emp = pd.read_sql(sql_str, engine)

以上です。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?