LoginSignup
5
6

More than 3 years have passed since last update.

psycopg2 メモ

Last updated at Posted at 2020-07-14

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


  1. PEP249を満たしているかららしい 

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6