ローカルにあったメモ書きを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。