【 Python 】psycopg2でPostgreSQLにアクセスしよう!

当ページのリンクには広告が含まれています。

今回はPythonからPostgreSQLデータベースに接続し、データを更新したり取得する方法について解説します。

PostgreSQL は無料で使える本格的なデータベースであり、商用利用も盛んにされていますので、仕事で必要に迫られるケースも多いと思います。

PostgreSQL データベースに関して基本的な知識があり、Pythonから接続する方法を知りたいという方が対象の記事になっています。

目次

接続する前の準備

Python から PostgreSQL に接続するには、次の手順が必要です。

  1. psycopg2パッケージのインストール
  2. Pythonプログラム上で psycopg2のインポート

尚、psycopg2のパッケージは、他の開発ツールのインストールによって、既にインストール済みの場合があります。

pyodbc のインストール

Python公式サイトからPythonをダウンロードして使っている方は、DOSプロンプトから下記コマンドを実行します。

pip install psycopg2

AnacondaやMinicondaでPythonをインストールして使っている方DOSプロンプトから下記コマンドを実行します。

conda install psycopg2

上記でインストールできない場合は、psycopg2 の公式サイト から whl をダウンロードし、pip コマンドでインストールします。

ダウンロードサイトのスクリーンショット

2024年6月現在では、下記のパッケージ(64ビット版)が最新です。

psycopg2-2.9.9-cp**-cp**-win_amd64.whl

** の部分は対応しているPythonのバージョンですが、自分が使っているPythonのバージョンより下のバージョン(例えばPythonが3.9なら、psycopy2は3.9,3.8,3.7,3.6)なら、どれを選んでも接続できるようです。

ダウンロードしたら、pip install ファイル名 でインストールします。

例えば、 C:\Downloads にダウンロードした場合、次の様になります。

pip install C:\Downloads\psycopg2-2.9.9-cp312-cp312-win_amd64.whl

PostgreSQLに接続し、SQLを実行するための手順

SQLやDDLを実行するための手順は、SQLite、MySQL、Oracle など多くのデータベースと同様です。

PostgreSQL への接続

PostgreSQL に接続するためには、下記の仕様で接続文字列を作成し、connectメソッドに渡す必要があります。

host='xxx' port=xxx dbname=xxx user=xxx password='xxx'

XXXの部分は、 サーバー名、ポート番号 、データベース名、ユーザー名、パスワードに置き換える必要があります。

例えば、 サーバー名='myserver'、ポート番号=5432、データベース名='mydatabase'、ユーザーID='yamada'、パスワード='hoge1234' の場合は次のようになります。

host='myserver' port=5432 dbname=mydatabas user=yamada password='hoge1234'

ちなみに、 PostgreSQL のデフォルトのポートは 5432になります。

接続文字列が完成したら、connect メソッドの引数に指定することで、PostgreSQL に接続出来るようになります。

データの取得

PostgreSQL に対して select 文を発行し、データを取得する方法は次のようになります。

fetch には次の3種類が用意されていますので、状況に応じて使い分けて下さい。

機能メソッド備考
全件取得fetchall()リスト形式で全件を返す。
1件づつ取得fatchone()データがあれば1行をタプル形式で返す。
データが無くなれば None を返す。
指定件数づつ取得fetchmeny(件数)

下記は PostgreSQL に接続し、条件に一致したデータを全件取得するサンプルです。

データの更新、DDLの実行

データの更新やDDLの実行は次のようになります。

トランザクションについては、最初のSQL実行時に自動で開始されますので、特に明記する必要はありませんが、何らかの事情で明示的に記述が必要な場合、conn.begin() と記述します。

また、トランザクションを確定させるには conn.commit() 、トランザクションを無効にしたい場合には conn.rollback() メソッドを呼び出します。

DDLはロールバックが出来ないため、commit() は不要ですが、commit() をしても特にエラーにはなりません。

下記はinsertのサンプルです。

下記はDDLのサンプルです。

PostgreSQLで使える便利なクラスや書き方の紹介

ここまでの記事を通して、psycopg2を使ってPostgreSQLへアクセスするための方法は理解していただけたかと思います。とはいうものの、実際にPostgreSQLに接続して検索や更新を行おうとすると、どう書けばよいのか悩んでしまう方も多いかもしれません。

そこで、PythonからPostgreSQLを簡単に扱うためのクラスを用意しました。また、InsertとUpdateをまとめて行えるUpsertや、複数のInsertを1回で実行する方法なども別記事で用意しました。下記のリンクからジャンプできますので、興味のある方はご一読ください。

【 コピペでOK】9割の機能を網羅!PythonからPostgreSQLを扱うクラスを作ってみました。
【詳しく解説】PostgreSQLにおけるUpsertの書き方(サンプル付き)
PostgreSQLに1回のinsertで複数データ登録 by Python

PostgreSQLのストアドプロシージャについても、下記の記事で詳しく解説しています。

あわせて読みたい
【サンプル満載】postgresql ストアド プロシージャ自由自在(stored procedure) 仕事で PostgreSQL のストアドプロシージャを使うことになったので、色々とググったところ、今一分かりやすい記事が見つかりませんでした。 そこで、これから PostgreSQ...

まとめ

今回は Python を使って PostgreSQL に接続するために必要なpsycopg2のインストール方法 と、PostgreSQL に接続した後にデータの抽出や更新を行うための簡単なサンプルを紹介しまた。

Pythonのデータベース接続は、データベースの種類によってコネクションの部分が多少異なるものの、接続してしまえば後の手順(データ抽出、データ更新、DDL発行)は同じです。

この記事がPythonで PostgreSQL に接続するための参考になれば幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次