Sdílet prostřednictvím


Rychlý start: Použití Pythonu k připojení a dotazování dat na flexibilním serveru Azure Database for PostgreSQL

PLATÍ PRO: Flexibilní server Azure Database for PostgreSQL

V tomto rychlém startu se připojíte k instanci flexibilního serveru Azure Database for PostgreSQL pomocí Pythonu. Příkazy SQL pak použijete k dotazování, vkládání, aktualizaci a odstraňování dat v databázi z platforem macOS, Ubuntu Linux a Windows.

Kroky v tomto článku zahrnují dvě metody ověřování: ověřování Microsoft Entra a ověřování PostgreSQL. Karta Bez hesla zobrazuje ověřování Microsoft Entra a karta Heslo zobrazuje ověřování PostgreSQL.

Ověřování Microsoft Entra je mechanismus pro připojení ke službě Azure Database for PostgreSQL pomocí identit definovaných v MICROSOFT Entra ID. Pomocí ověřování Microsoft Entra můžete spravovat identity uživatelů databáze a další služby Microsoft v centrálním umístění, což zjednodušuje správu oprávnění. Další informace najdete v tématu Ověřování Microsoft Entra s flexibilním serverem Azure Database for PostgreSQL.

Ověřování PostgreSQL používá účty uložené v PostgreSQL. Pokud se rozhodnete používat hesla jako přihlašovací údaje pro účty, budou tyto přihlašovací údaje uloženy v user tabulce. Vzhledem k tomu, že tato hesla jsou uložená v PostgreSQL, musíte spravovat rotaci hesel sami.

Tento článek předpokládá, že máte zkušenosti s vývojem pomocí Pythonu, ale začínáte pracovat s flexibilním serverem Azure Database for PostgreSQL.

Požadavky

Přidání pravidel brány firewall pro klientskou pracovní stanici

Konfigurace integrace Microsoft Entra na serveru (jenom bez hesla)

Pokud postupujete podle kroků pro ověřování bez hesla, musí být pro vaši instanci serveru nakonfigurované ověřování Microsoft Entra a musíte být v instanci serveru přiřazeni jako správce Microsoft Entra. Postupujte podle pokynů v části Konfigurace integrace Microsoft Entra a ujistěte se, že je nakonfigurované ověřování Microsoft Entra a že jste v instanci serveru přiřazeni jako správce Microsoft Entra.

Příprava vývojového prostředí

Přejděte do složky, ve které chcete spustit kód, a vytvořte a aktivujte virtuální prostředí. Virtuální prostředí je samostatný adresář pro konkrétní verzi Pythonu a další balíčky potřebné pro danou aplikaci.

Spuštěním následujících příkazů vytvořte a aktivujte virtuální prostředí:

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

Instalace knihoven Pythonu

Nainstalujte knihovny Pythonu potřebné ke spuštění příkladů kódu.

Nainstalujte modul psycopg2, který umožňuje připojení k databázi PostgreSQL a dotazování na databázi PostgreSQL a knihovnu azure-identity, která poskytuje podporu ověřování tokenů Microsoft Entra v rámci sady Azure SDK.

pip install psycopg2
pip install azure-identity

Přidání ověřovacího kódu

V této části přidáte do pracovního adresáře ověřovací kód a provedete všechny další kroky potřebné k ověřování a autorizaci v instanci serveru.

  1. Zkopírujte následující kód do editoru a uložte ho do souboru s názvem 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. Získejte informace o připojení k databázi.

    1. Na webu Azure Portal vyhledejte a vyberte název flexibilního serveru Azure Database for PostgreSQL.
    2. Na stránce Přehled serveru zkopírujte plně kvalifikovaný název serveru. Plně kvalifikovaný název serveru je vždy ve formátu <my-server-name.postgres.database.azure.com>.
    3. V nabídce vlevo v části Zabezpečení vyberte Ověřování. Ujistěte se, že je váš účet uvedený v části Microsoft Entra Admins. Pokud tomu tak není, proveďte kroky v části Konfigurace integrace Microsoft Entra na serveru (jenom bez hesla).
  3. Nastavte proměnné prostředí pro elementy identifikátoru URI připojení:

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

    V příkazech nahraďte následující zástupné hodnoty:

    • <server-name> s hodnotou, kterou jste zkopírovali z webu Azure Portal.
    • <username> s vaším uživatelským jménem Azure; například. john@contoso.com.
    • <database-name> s názvem vaší flexibilní serverové databáze Azure Database for PostgreSQL. Při vytváření serveru se automaticky vytvořila výchozí databáze s názvem postgres . Tuto databázi můžete použít nebo vytvořit novou databázi pomocí příkazů SQL.
  4. Přihlaste se k Azure na své pracovní stanici. Můžete se přihlásit pomocí Azure CLI, Azure PowerShellu nebo Azure Developer CLI. Pokud se například chcete přihlásit přes Azure CLI, zadejte tento příkaz:

    az login
    

    Ověřovací kód používá DefaultAzureCredential k ověření pomocí ID Microsoft Entra a získání tokenu, který umožňuje provádět operace na instanci serveru. DefaultAzureCredential podporuje řetěz typů přihlašovacích údajů ověřování. Mezi podporované přihlašovací údaje patří přihlašovací údaje, které jste přihlášeni k vývojářským nástrojům, jako jsou Azure CLI, Azure PowerShell nebo Azure Developer CLI.

Spuštění příkladů Pythonu

Pro každý příklad kódu v tomto článku:

  1. Vytvořte nový soubor v textovém editoru.

  2. Přidejte do souboru příklad kódu.

  3. Uložte soubor do složky projektu s příponou .py , například postgres-insert.py. V systému Windows se ujistěte, že při uložení souboru je vybrané kódování UTF-8.

  4. V typu python složky projektu následuje název souboru, například python postgres-insert.py.

Vytvoření tabulky a vložení dat

Následující příklad kódu se připojí k flexibilní serverové databázi Azure Database for PostgreSQL pomocí psycopg2.connect funkce a načte data pomocí příkazu SQL INSERT . Funkce cursor.execute spustí dotaz SQL na databázi.

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

Když se kód úspěšně spustí, vytvoří následující výstup:

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

Čtení dat

Následující příklad kódu se připojí k flexibilní serverové databázi Azure Database for PostgreSQL a ke čtení dat používá cursor.execute s příkazem SQL SELECT . Tato funkce přijme dotaz a vrátí sadu výsledků pro iteraci pomocí cursor.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()

Když se kód úspěšně spustí, vytvoří následující výstup:

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

Aktualizace dat

Následující příklad kódu se připojí k databázi flexibilního serveru Azure Database for PostgreSQL a k aktualizaci dat používá cursor.execute s příkazem SQL UPDATE .

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

Odstranění dat

Následující příklad kódu se připojí k databázi flexibilního serveru Azure Database for PostgreSQL a pomocí příkazu cursor.execute s příkazem SQL DELETE odstraní položku inventáře, kterou jste předtím vložili.

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

Další kroky