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
- Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
- Flexibilní instance serveru Azure Database for PostgreSQL. Pokud chcete vytvořit instanci flexibilního serveru Azure Database for PostgreSQL, přečtěte si informace o vytvoření instance flexibilního serveru Azure Database for PostgreSQL pomocí webu Azure Portal.
- Python 3.8+.
- Nejnovější instalační program balíčku pip .
Přidání pravidel brány firewall pro klientskou pracovní stanici
- Pokud jste vytvořili instanci flexibilního serveru Azure Database for PostgreSQL s privátním přístupem (integrace virtuální sítě), budete se muset k serveru připojit z prostředku ve stejné virtuální síti jako váš server. Můžete vytvořit virtuální počítač a přidat ho do virtuální sítě vytvořené pomocí flexibilní instance serveru Azure Database for PostgreSQL. Informace o vytvoření a správě virtuální sítě flexibilního serveru Azure Database for PostgreSQL pomocí Azure CLI
- Pokud jste vytvořili instanci flexibilního serveru Azure Database for PostgreSQL s veřejným přístupem (povolené IP adresy), můžete místní IP adresu přidat do seznamu pravidel brány firewall na vašem serveru. Informace o vytváření a správě pravidel firewallu flexibilního serveru Azure Database for PostgreSQL pomocí Azure CLI
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 knihovnu azure-identity , která poskytuje podporu ověřování tokenů Microsoft Entra napříč sadou Azure SDK.
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.
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
Získejte informace o připojení k databázi.
- Na webu Azure Portal vyhledejte a vyberte název flexibilního serveru Azure Database for PostgreSQL.
- 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>.
- 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).
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.
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:
Vytvořte nový soubor v textovém editoru.
Přidejte do souboru příklad kódu.
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.
V typu
python
složky projektu následuje název souboru, napříkladpython 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í psycopg.connect
funkce a načte data pomocí příkazu SQL INSERT . Funkce cursor.execute
spustí dotaz SQL na databázi.
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()
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 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()
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 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()
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 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()