VSCodeで、pythonからローカルのPostgreSQLにアクセスする例。
環境:
・Windows
・PostgreSQLがインストールされている
・SQLクライアントはA5:SQL Mk-2
目次
psycopg2とは
psycopg2(サイコピージー):PythonからPostgreSQLに接続するためのライブラリ
psycopg2のインストール
pip install psycopg2
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・変えないでねのアピールに使ったりもありそう。