クイック スタート:Python を使用して Azure Database for PostgreSQL - フレキシブル サーバーに接続し、データのクエリを実行する

適用対象: Azure Database for PostgreSQL - フレキシブル サーバー

このクイック スタートでは、Python を使用して Azure Database for PostgreSQL フレキシブル サーバー インスタンスに接続します。 Mac、Ubuntu Linux、Windows の各プラットフォームから SQL ステートメントを使用して、データベース内のデータを照会、挿入、更新、削除できます。

この記事では、Python を使用した開発には慣れているものの、Azure Database for PostgreSQL フレキシブル サーバーを初めて使用することを前提としています。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます
  • Azure Database for PostgreSQL フレキシブル サーバー インスタンス。 Azure Database for PostgreSQL フレキシブル サーバー インスタンスを作成するには、「Azure portal を使用して Azure Database for PostgreSQL - フレキシブル サーバー インスタンスを作成する」を参照してください。
  • Python 2.7 または 3.6 以降。
  • 最新の pip パッケージ インストーラー。

クライアント ワークステーションを準備する

PostgreSQL 用 Python ライブラリのインストール

psycopg2 モジュールを使用すると、PostgreSQL データベースに接続してクエリを実行でき、このモジュールは、Linux、macOS、または Windows の wheel パッケージとして使用できます。 すべての依存関係を含んだバイナリ バージョンのモジュールをインストールしてください。

psycopg2をインストールするには、ターミナルまたはコマンド プロンプトを開き、コマンド pip install psycopg2 を実行します。

データベース接続情報を取得する

Azure Database for PostgreSQL フレキシブル サーバー インスタンスに接続するには、完全修飾サーバー名とログイン資格情報が必要です。 この情報は Azure portal から取得できます。

  1. Azure portal で、Azure Database for PostgreSQL フレキシブル サーバー名を検索して選択します。

  2. サーバーの [概要] ページで、完全修飾サーバー名管理者ユーザー名をコピーします。 完全修飾サーバー名は常に <my-server-name>.postgres.database.azure.com の形式になります。

    また、管理者パスワードも必要です。 忘れた場合は、概要ページでリセットできます。

Python の例を実行する方法

この記事の各コード例では、次のことを行います。

  1. テキスト エディターで新しいファイルを作成します。

  2. ファイルにコード例を追加します。 コードで、次のように置き換えます。

    • <server-name> および <admin-username> を、Azure portal からコピーした値に指定します。
    • <admin-password> をサーバー パスワードに指定します。
    • <database-name> は、Azure Database for PostgreSQL フレキシブル サーバー データベースの名前で指定します。 サーバーの作成時に、postgres という名前の既定のデータベースが自動的に作成されています。 このデータベースの名前を変更することも、SQL コマンドを使用して新しいデータベースを作成することもできます。
  3. ファイルに .py 拡張子を付けてプロジェクト フォルダーに保存します。たとえば、postgres-insert.py のように指定します。 Windows の場合は、ファイルを保存するときに UTF-8 エンコードを選択するようにしてください。

  4. ファイルを実行するには、コマンドライン インターフェイスでプロジェクト フォルダーに移動し、「python」と入力して、その後にファイル名を入力します (例: python postgres-insert.py)。

テーブルを作成してデータを挿入する

次のコード例では、psycopg2.connect 関数を使用して Azure Database for PostgreSQL フレキシブル サーバー データベースに接続し、SQL IN Standard Edition RT ステートメントを使用してデータを読み込みます。 cursor. execute 関数は、データベースに対して SQL クエリを実行します。

import psycopg2

# Update connection string information 
host = "<server-name>"
dbname = "<database-name>"
user = "<admin-username>"
password = "<admin-password>"
sslmode = "require"

# Construct connection string
conn_string = "host={0} user={1} dbname={2} password={3} sslmode={4}".format(host, user, dbname, password, sslmode)
conn = psycopg2.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()

コードが正常に実行されると、次の出力が生成されます。

Command-line output

データの読み取り

次のコード例では、Azure Database for PostgreSQL フレキシブル サーバー データベースに接続し、sql Standard Edition LECT ステートメントで cursor.execute を使用してデータを読み取ります。 この関数ではクエリを受け取り、cursor.fetchall() を使用して反復処理する結果セットを返します

import psycopg2

# Update connection string information
host = "<server-name>"
dbname = "<database-name>"
user = "<admin-username>"
password = "<admin-password>"
sslmode = "require"

# Construct connection string
conn_string = "host={0} user={1} dbname={2} password={3} sslmode={4}".format(host, user, dbname, password, sslmode)
conn = psycopg2.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()

データの更新

次のコード例では、Azure Database for PostgreSQL フレキシブル サーバー データベースに接続し、SQL UPDATE ステートメントで cursor.execute を使用してデータを更新します。

import psycopg2

# Update connection string information
host = "<server-name>"
dbname = "<database-name>"
user = "<admin-username>"
password = "<admin-password>"
sslmode = "require"

# Construct connection string
conn_string = "host={0} user={1} dbname={2} password={3} sslmode={4}".format(host, user, dbname, password, sslmode)
conn = psycopg2.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 Database for PostgreSQL フレキシブル サーバー データベースに接続し、SQL DELETE ステートメントで cursor.execute を使用して、前に挿入したインベントリ項目を削除します。

import psycopg2

# Update connection string information
host = "<server-name>"
dbname = "<database-name>"
user = "<admin-username>"
password = "<admin-password>"
sslmode = "require"

# Construct connection string
conn_string = "host={0} user={1} dbname={2} password={3} sslmode={4}".format(host, user, dbname, password, sslmode)
conn = psycopg2.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()

次のステップ