このクイック スタートでは、Pythonを使用して Azure HorizonDB インスタンスに接続します。 macOS、Ubuntu Linux、Windows の各プラットフォームから SQL ステートメントを使用して、データベース内のデータを照会、挿入、更新、削除できます。
この記事の手順には、PostgreSQL 認証が含まれます。
PostgreSQL 認証では PostgreSQL に格納されているアカウントを使用するため、パスワードのローテーションを自分で管理する必要があります。
この記事では、Pythonを使用した開発には慣れているものの、HorizonDB Azure使用するのは初めてであることを前提としています。
Prerequisites
- アクティブなサブスクリプションを持つ Azure アカウント。 無料でアカウントを作成できます。
- Azure HorizonDB クラスター。 HorizonDB クラスター Azure作成するには、「Azure HorizonDB クラスターの作成を参照してください。
- Python 3.8 以降。
- 最新の pip パッケージ インストーラー。
クライアント ワークステーションのファイアウォール規則を追加する
- パブリック アクセス (許可された IP アドレス) を使用して Azure HorizonDB クラスターを作成した場合は、クラスターのファイアウォール規則の一覧にローカル IP アドレスを追加できます。 「Networking in Azure HorizonDB (Preview)を参照してください。
開発環境を準備する
コードを実行し、仮想環境を作成してアクティブ化するフォルダーに移動します。 仮想環境は、特定のバージョンの Python と、そのアプリケーションに必要なその他のパッケージ用の自己完結型ディレクトリです。
次のコマンドを実行し、仮想環境を作成してアクティブにします。
py -3 -m venv .venv
.venv\Scripts\activate
Python ライブラリをインストールする
コード例を実行するために必要な Python ライブラリをインストールします。
psycopg モジュールをインストールします。これによって、PostgreSQL データベースへの接続とクエリの実行が可能になります。
# Recommended: install the binary wheel that bundles a compatible libpq wrapper (Windows/macOS)
python -m pip install "psycopg[binary]"
# Linux alternative (if you prefer building against system libpq):
sudo apt-get update
sudo apt-get install -y libpq-dev build-essential python3-dev
python -m pip install psycopg
認証コードを追加する
このセクションでは、作業ディレクトリに認証コードを追加し、クラスター インスタンスでの認証と承認に必要な追加の手順を実行します。
認証コードを追加する前に、各例に必要なパッケージがインストールされていることを確認します。
必要なパッケージ (この記事の例):
- パスワードの例:
psycopg(推奨:python -m pip install "psycopg[binary]")
省略可能: これらのエントリを含む requirements.txt を作成し、 python -m pip install -r requirements.txt を使用してインストールして再現可能なインストールを行います。
次のコードをエディターにコピーし、get_conn.py という名前のファイルに保存します。
import urllib.parse import os def get_connection_uri(): # Read URI parameters from the environment dbhost = os.environ['DBHOST'] dbname = os.environ['DBNAME'] dbuser = urllib.parse.quote(os.environ['DBUSER']) password = os.environ['DBPASSWORD'] sslmode = os.environ['SSLMODE'] db_uri = f"host={dbhost} dbname={dbname} user={dbuser} password={password} sslmode={sslmode}" # Construct connection URI return db_uriデータベース接続情報を取得します。
Azure portal を使用して以下を実行します。
接続 URI 要素用の環境変数を設定します。
set DBHOST=<cluster-name> set DBNAME=<database-name> set DBUSER=<username> set DBPASSWORD=<password> set SSLMODE=require
Python の例を実行する方法
この記事の各コード例では、次のことを行います。
テキスト エディターで新しいファイルを作成します。
ファイルにコード例を追加します。
ファイルに .py 拡張子を付けてプロジェクト フォルダーに保存します。たとえば、postgres-insert.py のように指定します。 Windows の場合は、ファイルを保存するときに UTF-8 エンコードを選択するようにしてください。
プロジェクト フォルダーに、
pythonに続けてファイル名を入力します (例:python postgres-insert.py)。
テーブルを作成してデータを挿入する
次のコード例では、psycopg.connect 関数を使用してAzure HorizonDB クラスターに接続し、SQL INSERT ステートメントを使用してデータを読み込みます。
cursor.execute 関数は、データベースに対して SQL クエリを実行します。
import psycopg
from get_conn import get_connection_uri
conn_string = get_connection_uri()
conn = psycopg.connect(conn_string)
print("Connection established")
cursor = conn.cursor()
# Drop previous table of same name if one exists
cursor.execute("DROP TABLE IF EXISTS inventory;")
print("Finished dropping table (if existed)")
# Create a table
cursor.execute("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);")
print("Finished creating table")
# Insert some data into the table
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("banana", 150))
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("orange", 154))
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("apple", 100))
print("Inserted 3 rows of data")
# Clean up
conn.commit()
cursor.close()
conn.close()
コードが正常に実行されると、次の出力が生成されます。
Connection established
Finished dropping table (if existed)
Finished creating table
Inserted 3 rows of data
データの読み取り
次のコード例では、Azure HorizonDB クラスターに接続し、sql SELECT ステートメントで cursor.execute を使用してデータを読み取ります。 この関数はクエリを受け取り、cursor.fetchall() を使用して反復処理する結果セットを返します。
import psycopg
from get_conn import get_connection_uri
conn_string = get_connection_uri()
conn = psycopg.connect(conn_string)
print("Connection established")
cursor = conn.cursor()
# Fetch all rows from table
cursor.execute("SELECT * FROM inventory;")
rows = cursor.fetchall()
# Print all rows
for row in rows:
print("Data row = (%s, %s, %s)" %(str(row[0]), str(row[1]), str(row[2])))
# Cleanup
conn.commit()
cursor.close()
conn.close()
コードが正常に実行されると、次の出力が生成されます。
Connection established
Data row = (1, banana, 150)
Data row = (2, orange, 154)
Data row = (3, apple, 100)
データの更新
次のコード例では、Azure HorizonDB クラスターに接続し、sql UPDATE ステートメントで cursor.execute を使用してデータを更新します。
import psycopg
from get_conn import get_connection_uri
conn_string = get_connection_uri()
conn = psycopg.connect(conn_string)
print("Connection established")
cursor = conn.cursor()
# Update a data row in the table
cursor.execute("UPDATE inventory SET quantity = %s WHERE name = %s;", (200, "banana"))
print("Updated 1 row of data")
# Cleanup
conn.commit()
cursor.close()
conn.close()
データの削除
次のコード例では、Azure HorizonDB クラスターに接続し、sql DELETE ステートメントで cursor.execute を使用して、前に挿入したインベントリ項目を削除します。
import psycopg
from get_conn import get_connection_uri
conn_string = get_connection_uri()
conn = psycopg.connect(conn_string)
print("Connection established")
cursor = conn.cursor()
# Delete data row from table
cursor.execute("DELETE FROM inventory WHERE name = %s;", ("orange",))
print("Deleted 1 row of data")
# Cleanup
conn.commit()
cursor.close()
conn.close()