PythonでHeroku Postgresを操作する

はじめに

PythonからHeroku Postgresを操作する方法を解説します。

Heroku Postgresの準備については下記を参照してください。

Heroku Postgresを使ってみる
はじめにHeroku Postgresを作成するまでを解説していきます。HerokuとはHerokuとは、Webアプリケーションを簡単に構築、運用できるPaaSになります。アプリケーションの作成だけでなく、アドオンによって多くの追加...

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でトランザクションを終了します。

最後に接続とカーソルを閉じます。

import os
import psycopg2

DATABASE_URL = os.environ.get('DATABASE_URL')

conn = psycopg2.connect(DATABASE_URL)
cur = conn.cursor()

title = '【GCP】Cloud Functionsを定期実行したい'
url = 'https://amateur-engineer-blog.com/cloud-functions-periodic-execution/'
cur.execute(
    "INSERT INTO articles(title, url) VALUES(%s, %s)", (title, url))
conn.commit()

cur.close()
conn.close()

使い方のサンプル

基本的なデータ操作のサンプルを紹介していきます。

サンプルで利用するデータベースは以下で解説しているものを利用します。

Heroku Postgresでテーブル作成と基本的なデータ操作
はじめにHeroku Postgresでテーブルを作成して、データ追加や取得などの基本的な一連の操作を解説していきます。Heroku Postgresの準備については下記を参照してください。データベース接続Heroku Postg...

データの追加

withを利用することでclosecommitを使うことなく、記述できます。

import os
import psycopg2

DATABASE_URL = os.environ.get('DATABASE_URL')

title = '【GCP】Cloud Functionsを定期実行したい'
url = 'https://amateur-engineer-blog.com/cloud-functions-periodic-execution/'

with psycopg2.connect(DATABASE_URL) as conn:
    with conn.cursor() as curs:
        curs.execute(
            "INSERT INTO articles(title, url) VALUES(%s, %s)", (title, url))

複数データを一括で追加する場合はextras.execute_valuesを利用します。

import os
import psycopg2
from psycopg2 import extras

DATABASE_URL = os.environ.get('DATABASE_URL')

insert_list = [("【GCP】PythonでCloud Functions", "https://amateur-engineer-blog.com/cloud-functions-python/"),
               ("【AtCoder】Pythonでキューを使う",
                    "https://amateur-engineer-blog.com/python-queue/"),
               ("【Flask】簡単なAPIを実装", "https://amateur-engineer-blog.com/flask-api/")]

with psycopg2.connect(DATABASE_URL) as conn:
    with conn.cursor() as curs:
        extras.execute_values(
            curs,
            "INSERT INTO articles(title, url) VALUES %s", insert_list)

データの取得

fetchallで実行結果をまとめて取得できます。

import os
import psycopg2

DATABASE_URL = os.environ.get('DATABASE_URL')

with psycopg2.connect(DATABASE_URL) as conn:
    with conn.cursor() as curs:
        curs.execute("SELECT * FROM articles")
        curs.fetchall()

データの更新

import os
import psycopg2

DATABASE_URL = os.environ.get('DATABASE_URL')

id = '5'
description = 'GCPのCloud Functionsを定期実行する方法を解説していきます。'

with psycopg2.connect(DATABASE_URL) as conn:
    with conn.cursor() as curs:
        curs.execute(
            "UPDATE articles SET description=%s WHERE id=%s", (description, id))

データの削除

import os
import psycopg2

DATABASE_URL = os.environ.get('DATABASE_URL')

id = '5'

with psycopg2.connect(DATABASE_URL) as conn:
    with conn.cursor() as curs:
        curs.execute('DELETE FROM articles WHERE id=%s', id)

参考

タイトルとURLをコピーしました