自分のキャリアをあれこれ考えながら、Pythonで様々なデータを分析していくブログです

PythonからPsycopg2を使ってPostgreSQLのデータを操作してみる

Python
Python

明けましておめでとうございます。
2022年の最初の投稿になります、ヒノマルクです。

前回投稿した日から暫く経ってしまいました。

PythonからPostgreSQLにアクセスできるようにしようと思います。

スポンサーリンク

Psycopgについて

今回はPsycopgというライブラリを使ってPostgreSQLにアクセスできるようにします。

詳細のインストール方法は下記に記載されています。

Installation — Psycopg 2.9.9 documentation
スポンサーリンク

SQLAlchemyの紹介

PostgreSQLにつなぐことができるライブラリは他には
SQLAlchemyというものもあります。

SQLAlchemyはObject Relational Mapping (ORM) と言われるライブラリになります。ORMは主にシステム開発で利用されているかと思います。SQLを書けなくてもSQLAlchemyのメソッドを使ってDB操作をすることが出来るのがポイントになります。

SQLAlchemy内でpsycopg2やcx_Oracleなどのライブラリを読み込んでSQLAlchemyの記述方法で統一することによって異なるDBへのアクセスでも同じコードで操作することを可能にしてくれています。

複数のライブラリを使い分けるのが面倒な方はSQLAlchemyをインストールすることをおすすめします。

SQLAlchemyの使い方はいつか記事にしようと思います。

しかしヒノマルクはSQLでの記述が主体で、ORMよりは慣れているので、psycopg2を利用しています。

スポンサーリンク

Psycopg2のインストール

Mac環境での動作を想定しています。
Linux環境で用意する方法はまた別記事にしようと思います。

よくpsycopg-binaryで環境を準備している記事を見かけます。

お試しで動かす程度でしたらいいのですが、Production環境では非推奨*1のようです。

また、wheelでのインストールもlibsslがコンフリクトを起こす可能性*1があるので、ソースからビルドすることを公式ではおすすめされています。

スポンサーリンク

Psycopg2をソースからビルドする

pg_configへのパスを通す
$ export PATH=/Applications/Postgres.app/Contents/Versions/14/bin/:$PATH

ヒノマルクはMacのPostgres.appでpostgreSQL環境を構築していますので、上記がpg_configへのパスになります。

ソースからPsycopg2をビルドする
$ /Users/hinomaruc/Desktop/notebooks/my-venv/bin/python3 -m pip install --no-binary :all: psycopg2
Out[0]
Collecting psycopg2
  Downloading psycopg2-2.9.3.tar.gz (380 kB)
     |████████████████████████████████| 380 kB 3.3 MB/s
  Preparing metadata (setup.py) ... done
Skipping wheel build for psycopg2, due to binaries being disabled for it.
Installing collected packages: psycopg2
    Running setup.py install for psycopg2 ... done
Successfully installed psycopg2-2.9.3

GitHub もしくは PyPIにPsycopg2のソースがアップされています。

今回はPyPIからソースをビルドしました。

スポンサーリンク

PythonでPsycopg2を使ってみる

Psycorpg2のライブラリを読み込む
# https://www.psycopg.org/docs/module.html
import psycopg2
データベースへの接続情報の作成
# https://www.psycopg.org/docs/connection.html
conn = psycopg2.connect("dbname=postgres user=postgres password=secret host=localhost port=5432")
カーソルの作成
# https://www.psycopg.org/docs/cursor.html
cur = conn.cursor()
testテーブル作成
cur.execute("CREATE TABLE test (id serial PRIMARY KEY, num integer, data varchar);")
データ投入
cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)",(100, "abc'def"))
SQLの発行
cur.execute("SELECT * FROM test;")
フェッチして発行したSQLの結果確認
cur.fetchone()
Out[0]
(1, 100, "abc'def")
コミットしてトランザクションの処理を確定させる
conn.commit()
作成したカーソルとコネクションを解放する
# Close communication with the database
cur.close()
conn.close()

実業務だとデータベースからpandasにデータを読み込んで処理をすることが多いと思うので、そちらも記事化しようと思っています。

スポンサーリンク

参照元

*1 https://www.psycopg.org/docs/install.html

タイトルとURLをコピーしました