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に依存しないでバッチ処理を書けるので、色々楽なシーンも出てくるのではないかと思います。