こんにちは。湖山です。
最近、PythonでPostgreSQLに接続するプログラムを作成したので、備忘録として残しておきます。
psycopg2とは
psycopg2は、Python で PostgreSQL へ接続するための有名なライブラリになります。
Python DB API 2.0仕様の完全な実装とスレッドセーフです。(複数のスレッドが同じ接続を共有できます)
これは、多数のカーソル作成および破棄や、多数の同時「INSERT/UPDATE」の操作など、高度にマルチスレッド化されたアプリケーション向けに設計されています。
Psycopg is the most popular PostgreSQL adapter for the Python programming language. Its core is a complete implementation of the Python DB API 2.0 specifications. Several extensions allow access to many of the features offered by PostgreSQL.
https://www.psycopg.org/
psycopg2は、公式のPostgreSQL Client LibraryであるlibpqのCラッパーです。
したがって、機能・速度的な問題の心配はなさそうです。
psycopg2の前提条件
psycopg2のビルドには、いくつかの前提条件(Cコンパイラ、一部の開発パッケージ)が必要です。
詳細についてはこちらをご確認ください。
- Cコンパイラ
- Pythonヘッダーファイル
- libpqヘッダーファイル
- pg_configファイル
psycopg2のインストール
インストール
# (Cloud9の場合)pg_configを含むパッケージをインストール
$ sudo yum install postgresql-devel
# psycopg2をインストール
$ pip install psycopg2
Cloud9環境では、「Error: pg_config executable not found.」のエラーが発生したため、pg_configを含むパッケージをインストールしました。環境によっては不要かもしれません。
クイックインストール
インストールに失敗する場合はこちらのクイックインストール版を試してみてください。
コンパイラや外部ライブラリを必要としないスタンドアロンパッケージを使用します。
以下のコマンドでコンパイル済みのバイナリバージョンのモジュールをインストールします。
$ インストール
$ pip install psycopg2-binary
バイナリバージョンのモジュール は、開発とテストには実用的な選択肢になります。
ただし、本番環境ではソースから構築されたパッケージを使用することをお勧めします。
psycopg2の動作確認
動作確認環境
- Cloud9 (Amazon Linux 2)
- python 3.9.10
- PostgreSQL: 12.9
- psycopg2: 2.9.3
サンプルプログラム
動作確認用のサンプルプログラムです。
import psycopg2
# DB接続情報
DB_NAME = 'データベース名'
DB_HOST = 'ホスト名'
DB_USER = 'ユーザー名'
DB_PASS = 'パスワード'
# DB接続関数
def connect():
return psycopg2.connect(
dbname=DB_NAME,
host=DB_HOST,
user=DB_USER,
password=DB_PASS
)
# 準備
con = connect()
cur = con.cursor()
# SQL実行
cur.execute("select version()")
print(cur.fetchone())
# 後処理
cur.close()
con.close()
上記のプログラムを実行します。
$ python test.py
('PostgreSQL 12.9 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-12), 64-bit',)('PostgreSQL 12.9 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-12), 64-bit',)
このようにPostgreSQL のバージョンが取得できたら、動作確認完了です。
参考ページ
■psycopg2 公式ドキュメント
https://www.psycopg.org/docs/
■psycopg2 – PyPI
https://pypi.org/project/psycopg2/