Bagikan melalui


Mulai cepat: Menggunakan bahasa Python untuk menyambungkan dan mengkueri data di Azure Database for PostgreSQL - Server Tunggal

BERLAKU UNTUK: Azure Database for PostgreSQL - Server Fleksibel

Dalam mulai cepat ini, Anda menyambungkan ke instans server fleksibel Azure Database for PostgreSQL dengan menggunakan Python. Anda kemudian menggunakan pernyataan SQL untuk mengkueri, menyisipkan, memperbarui, dan menghapus data dalam database dari platform macOS, Ubuntu Linux, dan Windows.

Langkah-langkah dalam artikel ini mencakup dua metode autentikasi: Autentikasi Microsoft Entra dan autentikasi PostgreSQL. Tab Tanpa Kata Sandi memperlihatkan autentikasi Microsoft Entra dan tab Kata Sandi memperlihatkan autentikasi PostgreSQL.

Autentikasi Microsoft Entra adalah mekanisme untuk menyambungkan ke Azure Database for PostgreSQL menggunakan identitas yang ditentukan dalam ID Microsoft Entra. Dengan autentikasi Microsoft Entra, Anda dapat mengelola identitas pengguna database dan layanan Microsoft lain di lokasi pusat, yang menyederhanakan manajemen izin. Untuk mempelajari selengkapnya, lihat Autentikasi Microsoft Entra dengan Azure Database for PostgreSQL - Server Fleksibel.

Autentikasi PostgreSQL menggunakan akun yang disimpan di PostgreSQL. Jika Anda memilih untuk menggunakan kata sandi sebagai kredensial untuk akun, kredensial ini akan disimpan dalam user tabel. Karena kata sandi ini disimpan di PostgreSQL, Anda perlu mengelola rotasi kata sandi sendiri.

Artikel ini mengasumsikan bahwa Anda terbiasa mengembangkan menggunakan Python, tetapi Anda baru bekerja dengan server fleksibel Azure Database for PostgreSQL.

Prasyarat

Menambahkan aturan firewall untuk stasiun kerja klien Anda

Mengonfigurasi integrasi Microsoft Entra di server (hanya tanpa kata sandi)

Jika Anda mengikuti langkah-langkah untuk autentikasi tanpa kata sandi, autentikasi Microsoft Entra harus dikonfigurasi untuk instans server Anda, dan Anda harus ditetapkan sebagai administrator Microsoft Entra pada instans server. Ikuti langkah-langkah dalam Mengonfigurasi integrasi Microsoft Entra untuk memastikan bahwa autentikasi Microsoft Entra dikonfigurasi dan Anda ditetapkan sebagai administrator Microsoft Entra di instans server Anda.

Mempersiapkan lingkungan pengembangan Anda

Ubah ke folder tempat Anda ingin menjalankan kode dan membuat dan mengaktifkan lingkungan virtual. Lingkungan virtual adalah direktori mandiri untuk versi Python tertentu ditambah paket lain yang diperlukan untuk aplikasi tersebut.

Jalankan perintah berikut untuk membuat dan mengaktifkan lingkungan virtual:

py -3 -m venv .venv
.venv\Scripts\activate

Menginstal pustaka Python

Instal pustaka Python yang diperlukan untuk menjalankan contoh kode.

Instal modul psycopg2, yang memungkinkan menyambungkan dan mengkueri database PostgreSQL, dan pustaka identitas azure, yang menyediakan dukungan autentikasi token Microsoft Entra di seluruh Azure SDK.

pip install psycopg2
pip install azure-identity

Menambahkan kode autentikasi

Di bagian ini, Anda menambahkan kode autentikasi ke direktori kerja Anda dan melakukan langkah-langkah tambahan yang diperlukan untuk autentikasi dan otorisasi dengan instans server Anda.

  1. Salin kode berikut ke editor dan simpan dalam file bernama get_conn.py.

    import urllib.parse
    import os
    
    from azure.identity import DefaultAzureCredential
    
    # IMPORTANT! This code is for demonstration purposes only. It's not suitable for use in production. 
    # For example, tokens issued by Microsoft Entra ID have a limited lifetime (24 hours by default). 
    # In production code, you need to implement a token refresh policy.
    
    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'])
        sslmode = os.environ['SSLMODE']
    
        # Use passwordless authentication via DefaultAzureCredential.
        # IMPORTANT! This code is for demonstration purposes only. DefaultAzureCredential() is invoked on every call.
        # In practice, it's better to persist the credential across calls and reuse it so you can take advantage of token
        # caching and minimize round trips to the identity provider. To learn more, see:
        # https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/identity/azure-identity/TOKEN_CACHING.md 
        credential = DefaultAzureCredential()
    
        # Call get_token() to get a token from Microsft Entra ID and add it as the password in the URI.
        # Note the requested scope parameter in the call to get_token, "https://ossrdbms-aad.database.windows.net/.default".
        password = credential.get_token("https://ossrdbms-aad.database.windows.net/.default").token
    
        db_uri = f"postgresql://{dbuser}:{password}@{dbhost}/{dbname}?sslmode={sslmode}"
        return db_uri
    
  2. Mendapatkan informasi koneksi database.

    1. Di portal Azure, cari dan pilih nama server fleksibel Azure Database for PostgreSQL Anda.
    2. Pada halaman Gambaran Umum server, salin nama Server yang sepenuhnya memenuhi syarat. Nama server yang sepenuhnya memenuhi syarat selalu dalam bentuk <nama-server-saya>.postgres.database.azure.com.
    3. Di menu sebelah kiri, di bawah Keamanan, pilih Autentikasi. Pastikan akun Anda tercantum di bawah Microsoft Entra Admins. Jika tidak, selesaikan langkah-langkah dalam Mengonfigurasi integrasi Microsoft Entra di server (hanya tanpa kata sandi).
  3. Atur variabel lingkungan untuk elemen URI koneksi:

    set DBHOST=<server-name>
    set DBNAME=<database-name>
    set DBUSER=<username>
    set SSLMODE=require
    

    Ganti nilai tempat penampung berikut dalam perintah:

    • <server-name>dengan nilai yang Anda salin dari portal Azure.
    • <username> dengan nama pengguna Azure Anda; misalnya. john@contoso.com.
    • <database-name> dengan nama database server fleksibel Azure Database for PostgreSQL Anda. Database default bernama postgres secara otomatis dibuat saat Anda membuat server Anda. Anda bisa menggunakan database tersebut atau membuat database baru dengan menggunakan perintah SQL.
  4. Masuk ke Azure di stasiun kerja Anda. Anda dapat masuk menggunakan Azure CLI, Azure PowerShell, atau Azure Developer CLI. Misalnya, untuk masuk melalui Azure CLI, masukkan perintah ini:

    az login
    

    Kode autentikasi menggunakan DefaultAzureCredential untuk mengautentikasi dengan MICROSOFT Entra ID dan mendapatkan token yang mengotorisasi Anda untuk melakukan operasi pada instans server Anda. DefaultAzureCredential mendukung rantai jenis kredensial autentikasi. Di antara kredensial yang didukung adalah kredensial yang Anda masuki ke alat pengembang seperti Azure CLI, Azure PowerShell, atau Azure Developer CLI.

Cara menjalankan contoh Python

Untuk setiap contoh kode dalam artikel ini:

  1. Buat file baru di editor teks.

  2. Tambahkan contoh kode ke file.

  3. Simpan file di folder proyek Anda dengan ekstensi .py seperti postgres-insert.py. Untuk Windows, pastikan pengkodean UTF-8 dipilih saat Anda menyimpan file.

  4. Di jenis python folder proyek Anda diikuti dengan nama file, misalnya python postgres-insert.py.

Membuat tabel dan menyisipkan rekaman

Contoh kode berikut tersambung ke database server fleksibel Azure Database for PostgreSQL Anda menggunakan fungsi , psycopg2.connect dan memuat data dengan pernyataan SQL INSERT . Fungsi ini cursor.execute menjalankan kueri SQL terhadap database.

import psycopg2
from get_conn import get_connection_uri

conn_string = get_connection_uri()

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()

Ketika kode berjalan dengan sukses, kode menghasilkan output berikut:

Connection established
Finished dropping table (if existed)
Finished creating table
Inserted 3 rows of data

Membaca data

Contoh kode berikut tersambung ke database server fleksibel Azure Database for PostgreSQL Anda dan menggunakan cursor.execute dengan pernyataan SQL SELECT untuk membaca data. Fungsi ini menerima kueri dan mengembalikan kumpulan hasil ke iterasi dengan menggunakan kursor.fetchall().

import psycopg2
from get_conn import get_connection_uri

conn_string = get_connection_uri()

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()

Ketika kode berjalan dengan sukses, kode menghasilkan output berikut:

Connection established
Data row = (1, banana, 150)
Data row = (2, orange, 154)
Data row = (3, apple, 100)

Memperbarui data

Contoh kode berikut tersambung ke database server fleksibel Azure Database for PostgreSQL Anda dan menggunakan cursor.execute dengan pernyataan PEMBARUAN SQL untuk memperbarui data.

import psycopg2
from get_conn import get_connection_uri

conn_string = get_connection_uri()

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()

Menghapus data

Contoh kode berikut menyambungkan ke database server fleksibel Azure Database for PostgreSQL Anda dan menggunakan cursor.execute dengan pernyataan SQL DELETE untuk menghapus item inventori yang sebelumnya Anda sisipkan.

import psycopg2
from get_conn import get_connection_uri

conn_string = get_connection_uri()

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()

Langkah berikutnya