ローカルにあったメモ書きをQiitaで供養します。
書いたのが去年なので古い情報もあるかもしれませんです。。
psycopg2 について
psycopg2はPythonでPostgreSQLを扱うライブラリです。
Refs.: 1, 2
psycopg2 で PostgreSQL DB に接続する
conn = psycopg2.connect({DB_URL(str)}) でDBコネクションを作成できます。
{DB_URL} は postgresql://{username}:{pass}@{IP Address or hostname}:{port}/{DB name} で指定されます。
または、conn = psycopg2.connect(host={IP Address or hostname(str)}, port={port number(int)}, dbname={DB name(str)}, user={username(str)}, password={pass(str)})でも指定できます。
コネクションは不要になったらclose()しますが、with 構文が使えるので使うといいと思います。
import psycopg2
with psycopg2.connect({DB URL}) as conn:
# Processes you want to do
クエリを投げる
投げるために、カーソルを作ります。
カーソルは、conn.cursor()で作れます。これも不要になったらclose()しますが、wi(以下略)。
cursor.execute({query string})でクエリを実行できます。
引数を与えたいときは、cursor.execute('SELECT * FROM EXAMPLE_TABLE WHERE FOO = %s', (fooval, ))といったように第二引数にタプル(またはリスト)で与えます。
また、引数を辞書(Dictionary型)で与えることもできます。その際は%(key)sといったようにプレースホルダにキーを与えます。
cur.execute("""
INSERT INTO some_table (an_int, a_date, another_date, a_string)
VALUES (%(int)s, %(date)s, %(date)s, %(str)s);
""",
{'int': 10, 'str': "O'Reilly", 'date': datetime.date(2005, 11, 18)})
import psycopg2
with psycopg2.connect({DB URL}) as conn:
with conn.cursor() as cur:
cur.execute({query})
クエリの結果を受け取る
SELECTとかの結果をPythonオブジェクトで受け取ります。
cursor.fetchone(), cursor.fetchall(), cursor.fetchmany(size)で受け取れます。
cursor.fetchone()
結果(クエリのresultset)の次の行から1件だけ受け取ります。結果はタプルで返ってきます。
cursorが終端を指しているときに実行すると、Noneが返ってきます。
cursor.fetchall()
結果(クエリのresultset)の次の行から全件受け取ります。結果はタプルのリストで返ってきます。
cursorが終端を指しているときに実行すると、空のリストが返ってきます。
cursor.fetchmany(size)
結果(クエリのresultset)の次の行からsize件受け取ります。結果はタプルのリストで返ってきます。
cursorが終端を指しているときに実行すると、空のリストが返ってきます。
コミットする
デフォルトでトランザクションが有効になっているため、コミットしないと変更が反映されません。connect.commit()でコミットしましょう。
connect.autocommit = Trueを設定するとトランザクションが無効になります。
ロールバックする
connect.rollback()です。
コネクションをwith構文で作成している場合、withブロック内で例外が起きると自動的にロールバックされるようです。便利だね1。