Python(Cpython)でPosgreSQLデータベースに接続し、データを読み込む処理を紹介します。Pythonでもデータベースを使用する機会は多く、「AI/機械学習モデルのデータ準備」や「Webアプリのバックエンド」等でデータベースとやり取りを行います。
又、接続時に発生するエラーについても紹介します。
- 【Python 初心者】PostgreSQLに接続する
- Python PostgreSQL 接続エラー/実行時エラー
- エラーコード: 08001 – Connection Refused
- エラーコード: 28P01 – Invalid Password
- エラーコード: 3D000 – Invalid Catalog Name
- エラーコード: 42501 – Insufficient Privilege
- エラーコード: 42703 – Undefined Column
- エラーコード: 42P01 – Undefined Table
- エラーコード: 23505 – Unique Violation
- エラーコード: 42601 – Syntax Error
- エラーコード: 57014 – Query Canceled
- エラーコード: XX000 – Internal Error
【Python 初心者】PostgreSQLに接続する
使用環境
- OS
- Windows 10 Pro 22H2
- OSビルド:19045.5011
- コードエディタ(IDE)
- Visual Studio Code Ver. 1.94
※仮想環境(v_posgre)を作成して実行しています。
- Visual Studio Code Ver. 1.94
- Python:Ver. 3.10.11
- PostgreSQL:Ver. 16.2
Python PosgreSQL 接続コーディング例
コーディング例を下記に示します。
今回は、PythonがPostgreSQLのデータベースに接続する為のライブラリとして、最も広く使われている「psycopg2」を使用しました。「psycopg2」ライブラリはターミナルからpipコマンドでインストールします。
- 「psycopg2」のインストール:pip install psycopg2
(v_posgre) PS C:\Python_Sample_posbre_connect> pip install psycopg2
Collecting psycopg2
Using cached psycopg2-2.9.10-cp310-cp310-win_amd64.whl.metadata (5.0 kB)
Using cached psycopg2-2.9.10-cp310-cp310-win_amd64.whl (1.2 MB)
Installing collected packages: psycopg2
Successfully installed psycopg2-2.9.10
(v_posgre) PS C:\Python_Sample_posbre_connect> pip list
Package Version
---------- -------
pip 24.2
psycopg2 2.9.10
setuptools 65.5.0
- PostgreSQLデータベースの接続とレコード読み込みのコーディング例
③で接続に必要な情報を指定し、接続情報を取得します。
④でカーソルを作成し、⑤でSELECT文を実行します。
⑥のfetchall()で、全レコードを配列に格納し、⑦で1レコードづつターミナルに出力します。
⑧で例外処理を定義し、⑨で接続情報を開放します。
import psycopg2 # ①PostgreSQL接続用ラブラリー
try:
connection = None # ②connectionの初期化
# ③データベース接続設定
connection = psycopg2.connect(
user="postgres", # PostgreSQLのユーザー名
password="xxxxxx", # パスワード
host="localhost", # ホスト(通常は'localhost')
port="5432", # ポート番号(通常は5432)
database="customer" # 接続するデータベース名
)
# ④カーソルを作成
cursor = connection.cursor()
# ⑤SQLクエリの実行(customer_tblのレコードを全て読み込む)
cursor.execute("SELECT * FROM customer_tbl;")
# ⑥結果をすべて取得
rows = cursor.fetchall()
# ⑦読み込んだレコードを全てターミナルに出力
for row in rows:
print(row)
# ⑧例外処理
except (Exception, psycopg2.Error) as error:
print("エラーが発生しました:", error)
# ⑨終了処理
finally:
# 接続を閉じる
if connection:
cursor.close()
connection.close()
print("PostgreSQL接続をクローズしました。")
- コーディングの実行結果
(1, '00001', '佐藤', '一郎', 'man', 30, 'A0001', '人事部')
(2, '00002', '山田', '太郎', 'man', 25, 'B0001', '営業部')
(3, '00003', '田中', '花子', 'woman', 28, 'C0001', '秘書室')
PostgreSQL接続をクローズしました。
(v_posgre) PS C:\Python_Sample_posbre_connect>
Visual Studio Code のインストール
- 本プログ内の「Visua Studio Code インストールと日本語化」を参考に、VSCodeをインストールして下さい。
PostgreSQLのインストール
- 本プログ内の「PostgreSQL インストール」を参考に、PostgreSQLをインストールして下さい。
VSCodeでの、Pythonのインストール
下記の手順でPythonをインストールします。
- ①「拡張機能」のアイコンをクリック
- ②検索欄に「Python」と入力:Ptyhon関係の拡張機能が表示されます。
- ③「拡張機能」の中の「Python」をクリックし、リリースバージョンをインストールします。
「Python」のインストールが開始します。
「拡張機能パック」として、「Pylance」「Python Debugger」もインストールされます。
- Pylance
Pyrightという型チェックツールを使い、コードの型ヒントを提供しながら、コード補完、型チェック、モジュールの自動インポートなどを強化する機能を備えています。 - Python Debugger
Visual Studio Code内でPythonコードをデバッグするための機能です。
Python PostgreSQL 接続エラー/実行時エラー
PythonとPostgreSQLを接続する際、接続やクエリ実行中に発生するエラーは、接続設定やSQLの記述ミス、権限など様々な原因が考えられます。以下によくあるエラーコードとその内容、解決方法を紹介します。
エラーコード: 08001 – Connection Refused
- 内容:PostgreSQLサーバーに接続できません。
- 原因と解決策
- サーバーが起動しているか確認する。
- hostとportが正しいかを確認する。
- サーバーのファイアウォールやセキュリティ設定も確認が必要です。
エラーコード: 28P01 – Invalid Password
- 内容:ユーザー名またはパスワードが間違っている。
- 原因と解決策
- userとpasswordの指定が正しいか確認する。
- データベースでそのユーザーの認証方式が正しいかも確認が必要です(pg_hba.confの設定)。
エラーコード: 3D000 – Invalid Catalog Name
- 内容:指定されたデータベース名が存在しない。
- 原因と解決策
- dbnameが正しいかを確認する。
- データベースが存在すること、または適切なデータベースを指定しているか確認する。
エラーコード: 42501 – Insufficient Privilege
- 内容:ユーザーに十分な権限がない。
- 原因と解決策
- 実行しようとしているクエリに対する権限がユーザーに付与されているか確認する。
- GRANT文を使用して、必要な権限を付与する。
エラーコード: 42703 – Undefined Column
- 内容:クエリで指定されたカラムがテーブルに存在しない
- 原因と解決策
- SQL文で指定したカラム名が正しいか確認する。
- カラム名のスペルミスや、引用符の使用なども確認する。
エラーコード: 42P01 – Undefined Table
- 内容:クエリで指定されたテーブルが存在しない。
- 原因と解決策
- テーブル名が正しいかを確認し、テーブルが作成されているかを確認する。
- スキーマを指定する必要がある場合は、schema.table_nameの形式で記述する。
エラーコード: 23505 – Unique Violation
- 内容:ユニーク制約違反(既に存在する値をユニークなカラムに挿入しようとした)。
- 原因と解決策
- 挿入や更新する値が重複していないか確認する。
- 重複を防ぐためにデータの事前チェックを行うか、ユニーク制約を取り除く。
エラーコード: 42601 – Syntax Error
- 内容:SQL文の文法エラー。
- 原因と解決策
- SQL文を再度確認し、構文エラーを修正する。
- 特にクォートやカッコ、カンマの不足・過剰に注意。
エラーコード: 57014 – Query Canceled
- 内容:クエリが手動またはタイムアウトでキャンセルされた。
- 原因と解決策
- クエリが長時間かかっている場合は、クエリの効率化を図る。
- タイムアウト設定が適切か確認する(例えばstatement_timeoutの設定)。
エラーコード: XX000 – Internal Error
- 内容:PostgreSQLの内部エラー(未定義のエラー)。
- 原因と解決策
- PostgreSQLのバージョンや設定に問題がある可能性があります。
- ログを確認して問題の詳細を調べ、必要に応じてPostgreSQLを再起動、もしくはアップデートする。
エラーコードを確認し、原因に応じて対処することで、PythonとPostgreSQLの接続と操作が安定します。また、tryとexceptブロックを使ってエラーハンドリングを行い、詳細なエラー情報をログに記録すると、トラブルシューティングが容易になります。