PythonでHeroku Postgresを操作する
はじめに
PythonからHeroku Postgresを操作する方法を解説します。
Heroku Postgresの準備については下記を参照してください。
Heroku Postgresを使ってみる
はじめに Heroku Postgresを作成するまでを解説していきます。 Herokuとは
PythonでHeroku Postgresを利用
PythonでHeroku Postgresを操作する場合は、PostgreSQLにアクセスできるライブラリであるpsycopg2
を利用します。
Heroku Postgres | Heroku Dev Center
The Heroku Postgres add-on is a production database service, offering PostgreSQL, read-only follower databases, snapshots for forks, and local client access.
超基本的な使い方
psycopg2.connect
でデータベースに接続し、cursor
でデータベースを操作するためのカーソルを開きます。
次にexecute
でクエリを実行し、commit
でトランザクションを終了します。
最後に接続とカーソルを閉じます。
1import os
2import psycopg2
3
4DATABASE_URL = os.environ.get('DATABASE_URL')
5
6conn = psycopg2.connect(DATABASE_URL)
7cur = conn.cursor()
8
9title = '【GCP】Cloud Functionsを定期実行したい'
10url = 'https://amateur-engineer-blog.com/cloud-functions-periodic-execution/'
11cur.execute(
12 "INSERT INTO articles(title, url) VALUES(%s, %s)", (title, url))
13conn.commit()
14
15cur.close()
16conn.close()
使い方のサンプル
基本的なデータ操作のサンプルを紹介していきます。
サンプルで利用するデータベースは以下で解説しているものを利用します。
Heroku Postgresでテーブル作成と基本的なデータ操作
はじめに Heroku Postgresで**テーブルを作成して、データ追加や取得などの基本的な
データの追加
with
を利用することでclose
やcommit
を使うことなく、記述できます。
1import os
2import psycopg2
3
4DATABASE_URL = os.environ.get('DATABASE_URL')
5
6title = '【GCP】Cloud Functionsを定期実行したい'
7url = 'https://amateur-engineer-blog.com/cloud-functions-periodic-execution/'
8
9with psycopg2.connect(DATABASE_URL) as conn:
10 with conn.cursor() as curs:
11 curs.execute(
12 "INSERT INTO articles(title, url) VALUES(%s, %s)", (title, url))
複数データを一括で追加する場合はextras.execute_values
を利用します。
1import os
2import psycopg2
3from psycopg2 import extras
4
5DATABASE_URL = os.environ.get('DATABASE_URL')
6
7insert_list = [("【GCP】PythonでCloud Functions", "https://amateur-engineer-blog.com/cloud-functions-python/"),
8 ("【AtCoder】Pythonでキューを使う",
9 "https://amateur-engineer-blog.com/python-queue/"),
10 ("【Flask】簡単なAPIを実装", "https://amateur-engineer-blog.com/flask-api/")]
11
12with psycopg2.connect(DATABASE_URL) as conn:
13 with conn.cursor() as curs:
14 extras.execute_values(
15 curs,
16 "INSERT INTO articles(title, url) VALUES %s", insert_list)
データの取得
fetchall
で実行結果をまとめて取得できます。
1import os
2import psycopg2
3
4DATABASE_URL = os.environ.get('DATABASE_URL')
5
6with psycopg2.connect(DATABASE_URL) as conn:
7 with conn.cursor() as curs:
8 curs.execute("SELECT * FROM articles")
9 curs.fetchall()
データの更新
1import os
2import psycopg2
3
4DATABASE_URL = os.environ.get('DATABASE_URL')
5
6id = '5'
7description = 'GCPのCloud Functionsを定期実行する方法を解説していきます。'
8
9with psycopg2.connect(DATABASE_URL) as conn:
10 with conn.cursor() as curs:
11 curs.execute(
12 "UPDATE articles SET description=%s WHERE id=%s", (description, id))
データの削除
1import os
2import psycopg2
3
4DATABASE_URL = os.environ.get('DATABASE_URL')
5
6id = '5'
7
8with psycopg2.connect(DATABASE_URL) as conn:
9 with conn.cursor() as curs:
10 curs.execute('DELETE FROM articles WHERE id=%s', id)