日記

日々のことと、Python/Django/PHP/Laravel/nodejs などソフトウェア開発のことを書き綴ります

psycopg2 を使って PostgreSQL に接続する

Djangoを使っていると Model フレームワークからデータアクセスするため、普段は意識しないですが、直接データベースコネクションを使ってデータを取得することも割と簡単です。今回はその方法を。

事前準備

以下の環境で接続を試しています。

サンプルのテーブル定義

CREATE TABLE test_data (
  name text
);

ソースコード

import psycopg2

connection = psycopg2.connect(
  database='sample_db', 
  user='postgres', 
  password='postgres', 
  host='127.0.0.1', 
  port=5432)

cursor = connection.cursor()

sql = """insert into test_data (name) values ('test-user');"""
cursor.execute(sql)
connection.commit()

sql = """select name from test_data order by name;"""
cursor.execute(sql)
rows = cursor.fetchall()
for row in rows:
    print row

cursor.close()
connection.close()

解説

基本的に手抜きコードですが、ポイントはこの部分。

connection = psycopg2.connect(
  database='sample_db', 
  user='postgres', 
  password='postgres', 
  host='127.0.0.1', 
  port=5432)

cursor = connection.cursor()

ここでコネクションを取得しています。このコネクションは、Djangoで Row Layer な Transaction を行うときにふれた connection と同じものです。

この connection / cursor などの API は [DB-API 2.0:http://www.python.jp/doc/contrib/peps/pep-0249.txt] として標準化されているようです。要は、MySQL だろうが SQLite だろうがAPIインターフェースは同じはず。

このデータベースコネクション取得を使うと、Djangoに依存しないでバッチ処理を書けるので、色々楽なシーンも出てくるのではないかと思います。