2021/06/7

SalesforceとHeroku Postgresを接続するPsycopg2をご紹介

 
  

Psycopg2とは

Psycopg2は、Python言語向けのPostgreSQLデータベースアダプターです。 Python DB API 2.0仕様を実装し、複数のスレッドで同一の接続を共有できます。多くのINSERT、UPDATEの並行処理など、高度にマルチスレッド化されたアプリケーションを想定して設計されています。

Psycopg2の特徴、対応バージョンなど

Psycopg 2はDB API2.0準拠のPostgreSQLドライバーで、C言語を中心として実装されているlibpqラッパーです。拡張性にすぐれ、カスタマイズがしやすいツールです。 <Psycopg 2の機能> ・クライアント側とサーバー側のカーソル ・非同期通信と通知 ・COPY サポート(COPY TO/COPY FROM) ・UnicodeとPython3の両方に対応 <Psycopg 2の対応バージョン> ・Python(ver. 2.7) ・Python 3 (ver.3.4 から 3.8 まで) ・PostgreSQL サーバー(ver. 2.77.4 から 12 まで) ・PostgreSQL クライアント ライブラリ(ver. 9.1 以降)

Psycopg2の使用許諾

フリーソフトウェアであるPsycopg2は、特定の目的や用途への適合性についていかなる保証もないことを、あらかじめ理解して利用しなければなりません。 Psycopg2の使用にあたっては、GNU劣等一般公衆利用許諾契約書(LGPL)のバージョン3以降の条件に基づいて、再配布または変更が許諾されています。 利用する前に必ず契約書の内容を確認しましょう。

Psycopg2を使ってSalesforceとHerokuのシームレスな同期を実現!

Heroku Connectは、SalesforceとHeroku Postgresの間でデータを同期させるアドオンツールです。SalesforceとHeroku Postgresの機能を利用して、PostgresデータベースのデータをSalesforceデータベースのデータと双方向で同期させることができます。 インタフェース上のポイントアンドクリックの操作のみで、両者のデータを共有するアプリケーションを構築できます。コーディングは不要です。 また、Lightningプラットフォームとの組み合わせで、Postgresに接続し、Heroku Connectを介してSalesforce上のデータ作成、読み取り、更新、削除を実行するアプリを構築できます。Rails、Node.js、Pythonを使って、SQL文の作成と同じレベルの難易度で、シームレスな連携を実現できます。

HerokuPostgres とPsycopg2

Heroku Postgresは、Heroku社が提供するマネージドSQLデータベースサービスです。HerokuPostgresデータベースにアクセスする際、利用できるPostgreSQLドライバーのひとつがPsycopg2です。 Heroku Connect では、Herokuがサポートしている言語、フレームワークなどの任意のツールを使用できます。

SalesforceとHerokuの同期

Heroku Postgresのデータが変更されると、読み取り/書き込みとマークされたマッピングにしたがって、SOAPもしくはBulk API を使用して Salesforce に送信されます。 ・読み取り/書き込みテーブルが更新される。 ・_trigger_log (トリガーログ) テーブルへの挿入で変更を発見する。 ・Postgres トリガーが発動する。 この動作はすべての読み取り/書き込みデータテーブル間で共有され、Heroku Connect は、接続ごとにすべての変更を1つのプロセスで処理します。このプロセスは、マッピングされたオブジェクトに対するSalesforceからの読み取りとは別に、並行して実行されます。

各処理のHerokuConnectの動作は?

マッピングされた読み取り/書き込みテーブルで、それぞれの処理が発生するたびに、以下の処理が実行されます。 <INSERT> ・Salesforce への INSERT が成功する。 ・新しく作成されたレコードの sfid を、Postgres 内の起点のテーブルに書き戻す。 <UPDATE> ・変更の前後で行の値を比較し、変更された値のみを記録する。 <DELETE> ・削除のみを記録する。

Psycopg2の使い方とインストールの条件

前述の通り、SalesforceとHeroku Connect を使用する際、Psycog2が必要になります。ここでは、Psycog2の使い方の例とインストールに必要な環境について説明します。

PostgreSQLへの接続

Psycopg2 は接続したいデータベースを、文字列で指定するだけで接続できます。 環境変数 DATABASE_URL のフォーマット postgresql://{username}:{password}@{hostname}:{port}/{database}
import os
import psycopg2

DATABASE_URL = os.environ['DATABASE_URL']

conn = psycopg2.connect(DATABASE_URL, sslmode='require')

クエリの実行

Psycopg2でのクエリの実行は、コネクションオブジェクトからカーソルオブジェクトを取得して行います。INSERT、DELETEと、SELECTでは処理が異なります。

INSERT、DELETEの場合

INSERT、DELETEの処理は共通で、”実行したいSQL文”に、INSERT、DELETEのSQL文のいずれかを入れてください。 ①connect関数:DBと接続されたconnectionインスタンスを生成する ②connectionインスタンスのcursorメソッド:SQL文を実行できるcursorインスタンスを生成する ③execute:”実行したいSQL文” ④commit:DBに反映させる ⑤close: 最後に接続を切る
conn = psycopg2.connect(DATABASE_URL)
cursor = conn.cursor()
cursor.execute()
cursor.commit()

conn.close()

SELECTの場合

①~③まではINSERT、DELETEと同じですが、SELECTの場合はexecuteの後で、fetchone、fetchall、fetchmanyのいずれかで取得します。 最後に必ずCloseを入れてください。その理由は次項で説明します。
conn = psycopg2.connect(DATABASE_URL)
cursor.execute()
data = cursor.fetchall()
cursor.close()
conn.close()

要注意!closeを忘れるとエラーの無限ループの可能性

Psycopgでは、SQL文が実行されると、トランザクションが作成され、connectionクラスで処理されます。cursorがcloseされれば、トランザクションは終了します。 あるトランザクションをcloseする前に別のSQL文が実行されると、そのSQL文は実行中のトランザクションで実行されます。つまり、トランザクションでcloseされない状態で、SQL文が実行され続けることになります。 そこでエラーが発生すると、そのトランザクションが終了されるまで、エラーがトラップされ続け、次のSQL文を実行できなくなります。 cursorはcommitされると、自動的にcloseされますので、closeかcommitを必ず入れましょう。

Psycopg2インストールの条件

Psycopgが動作するには以下のツールやファイルが必要です。インストールする前に確認してください。 ・C コンパイラ ・Python ヘッダー ファイル ・libpq ヘッダー ファイル ・pg_configプログラム

Psycopg2を使いこなしてSalesforceのインテグレーションを拡充する

Psycopg2の概要やSalesforceでの使用例をご説明しました。 Psycopg2は、SalesforceとPostgreSQLアプリケーションのインテグレーションでは欠かせないツールです。 Psycopg2を効果的に利用するため、その機能や使い方を理解しておきましょう。]]>

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】