PythonでPostgreSQLにアクセスするメモ/VSCode,psycopg2

VSCodeで、pythonからローカルのPostgreSQLにアクセスする例。

 

環境:
Windows
PostgreSQLがインストールされている
SQLクライアントはA5:SQL Mk-2

 

目次

 

psycopg2とは

psycopg2(サイコピージー):PythonからPostgreSQLに接続するためのライブラリ

 

psycopg2のインストール

pip install psycopg2

 

Pythonライブラリのインストール(pipの使い方)

Pythonには多数の標準ライブラリがありますが、さらに外部ライブラリを活用することでプログラムの開発が効率的に行えます。
外部ライブラリをインストールするにはpipというツールを利用します。このツールを利用するとPyPIというサードパーティライブラリを管理している場所から、簡単にインストールを行うことができます。

 

単純なデータの取得

パスワードやDB名を変更して、こちらのページのままで使えました。

PythonでPostgreSQLを操作する(psycopg2)

 

import psycopg2
 
# データベースに接続
connection = psycopg2.connect(host='localhost',
                             user='postgres',
                             password='PostgreSQLのパスワード',
                             database='db名')
with connection:
    with connection.cursor() as cursor:
        # データ読み込み
        sql = "SELECT id, password FROM users WHERE email = %s"
        cursor.execute(sql, ['webmaster1@python.org'])
        result = cursor.fetchone()
        print(result)

・ファイルやDBのopenでは「with文」を使うことで、確実にclose忘れを予防できる。

・「%s」がプレースホルダーで、そこに値や変数を入れられる。(エスケープをしてくれるのでSQLインジェクション対策はOKかな…↓記事より。公式ドキュメント未確認。)

PostgreSQLをPythonからpsycopg2を使っていじる — そこはかとなく書くよん。 ドキュメント

 

辞書型で取得する

PythonでPostgreSQLを操作する(psycopg2)

こちらのページのまんまでいけました。

 

import psycopg2
from psycopg2.extras import DictCursor
 
# データベースに接続
connection = psycopg2.connect(host='localhost',
                             user='postgres',
                             password='PostgreSQLのパスワード',
                             database='mydb')
 
dict_cur = connection.cursor(cursor_factory=DictCursor)
 
with connection:
    with dict_cur:
        # データ読み込み
        sql = "SELECT id, password FROM users"
        dict_cur.execute(sql)
        result = dict_cur.fetchall()
        print(result)

DictCursorにより辞書型で取得できる

 

変数を使う

たいていは引数で値を受け取りいろいろ変えながら検索したいものです。「%s」がプレースホルダーで、dict_cur.execute(sql, (tuple(ids),))のようにするとOK。
executeの第2引数はタプルだそうで、pythonでタプルの書き方はいくつかあるようですが、ぱっと見のわかりやすさのために私は()で囲むので統一しようと思っています。

 

Pythonのリストとタプルの違い

リストは配列のように、複数のデータをグループのようにまとめて管理するのに便利ですが、似たデータ型にタプルもあります。

Pythonのタプルは作成後に変更ができないそうです。追加、削除などの変更を行わない場合には基本的にタプルを使うのがおすすめだそう。

C#だとreadonlyとかconstとかReadonlyCollectionなどでやりくりしているあの感じでしょうか。同じように数に対する数のような、参照のみOK・変えないでねのアピールに使ったりもありそう。

 

参考

PythonでPostgreSQLを操作する(psycopg2)