Share via


Quickstart: Python gebruiken om verbinding te maken en query's uit te voeren op gegevens in Azure Database for PostgreSQL - Flexible Server

VAN TOEPASSING OP: Azure Database for PostgreSQL - Flexibele server

In deze quickstart maakt u verbinding met een exemplaar van een flexibele Azure Database for PostgreSQL-server met behulp van Python. Vervolgens gebruikt u SQL-instructies om gegevens in de database op te vragen, in te voegen, bij te werken en te verwijderen van macOS-, Ubuntu Linux- en Windows-platforms.

De stappen in dit artikel bevatten twee verificatiemethoden: Microsoft Entra-verificatie en PostgreSQL-verificatie. Op het tabblad Wachtwoordloos wordt de Microsoft Entra-verificatie weergegeven en op het tabblad Wachtwoord wordt de PostgreSQL-verificatie weergegeven.

Microsoft Entra-verificatie is een mechanisme voor het maken van verbinding met Azure Database for PostgreSQL met behulp van identiteiten die zijn gedefinieerd in Microsoft Entra-id. Met Microsoft Entra-verificatie kunt u databasegebruikersidentiteiten en andere Microsoft-services op een centrale locatie beheren, waardoor het beheer van machtigingen wordt vereenvoudigd. Zie Microsoft Entra-verificatie met Azure Database for PostgreSQL - Flexible Server voor meer informatie.

PostgreSQL-verificatie maakt gebruik van accounts die zijn opgeslagen in PostgreSQL. Als u ervoor kiest om wachtwoorden als referenties voor de accounts te gebruiken, worden deze referenties opgeslagen in de user tabel. Omdat deze wachtwoorden zijn opgeslagen in PostgreSQL, moet u de rotatie van de wachtwoorden zelf beheren.

In dit artikel wordt ervan uitgegaan dat u bekend bent met het ontwikkelen met Behulp van Python, maar u bent nog niet bekend met het werken met flexibele Azure Database for PostgreSQL-server.

Vereisten

Firewallregels toevoegen voor uw clientwerkstation

Microsoft Entra-integratie configureren op de server (alleen zonder wachtwoord)

Als u de stappen voor verificatie zonder wachtwoord volgt, moet Microsoft Entra-verificatie zijn geconfigureerd voor uw serverexemplaren en moet u worden toegewezen als Microsoft Entra-beheerder op het serverexemplaren. Volg de stappen in Microsoft Entra-integratie configureren om ervoor te zorgen dat Microsoft Entra-verificatie is geconfigureerd en dat u als Microsoft Entra-beheerder op uw serverexemplaren bent toegewezen.

Uw ontwikkelomgeving voorbereiden

Ga naar een map waarin u de code wilt uitvoeren en maak en activeer een virtuele omgeving. Een virtuele omgeving is een zelfstandige map voor een bepaalde versie van Python plus de andere pakketten die nodig zijn voor die toepassing.

Voer de volgende opdrachten uit om een virtuele omgeving te maken en te activeren:

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

De Python-bibliotheken installeren

Installeer de Python-bibliotheken die nodig zijn om de codevoorbeelden uit te voeren.

Installeer de azure-identity-bibliotheek , die ondersteuning biedt voor Microsoft Entra-tokenverificatie in de Azure SDK.

pip install azure-identity

Verificatiecode toevoegen

In deze sectie voegt u verificatiecode toe aan uw werkmap en voert u eventuele aanvullende stappen uit die vereist zijn voor verificatie en autorisatie met uw serverexemplaren.

  1. Kopieer de volgende code naar een editor en sla deze op in een bestand met de naam 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. Gegevens over databaseverbindingen ophalen.

    1. Zoek en selecteer in Azure Portal de naam van uw flexibele Azure Database for PostgreSQL-server.
    2. Kopieer op de pagina Overzicht van de server de volledig gekwalificeerde servernaam. De volledig gekwalificeerde servernaam is altijd van de vorm <my-server-name.postgres.database.azure.com>.
    3. Selecteer Verificatie in het linkermenu onder Beveiliging. Zorg ervoor dat uw account wordt vermeld onder Microsoft Entra-beheerders. Als dit niet het probleem is, voert u de stappen uit in Microsoft Entra-integratie configureren op de server (alleen zonder wachtwoord).
  3. Stel omgevingsvariabelen in voor de verbindings-URI-elementen:

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

    Vervang de volgende waarden voor tijdelijke aanduidingen in de opdrachten:

    • <server-name> met de waarde die u hebt gekopieerd uit Azure Portal.
    • <username> met uw Azure-gebruikersnaam; bijvoorbeeld. john@contoso.com.
    • <database-name> met de naam van uw flexibele Azure Database for PostgreSQL-serverdatabase. Er is automatisch een standaarddatabase met de naam postgres gemaakt toen u uw server maakte. U kunt die database gebruiken of een nieuwe database maken met behulp van SQL-opdrachten.
  4. Meld u aan bij Azure op uw werkstation. U kunt zich aanmelden met de Azure CLI, Azure PowerShell of Azure Developer CLI. Als u zich bijvoorbeeld wilt aanmelden via de Azure CLI, voert u deze opdracht in:

    az login
    

    De verificatiecode gebruikt DefaultAzureCredential om te verifiëren met Microsoft Entra-id en een token op te halen waarmee u bewerkingen op uw serverexemplaren kunt uitvoeren. DefaultAzureCredential ondersteunt een keten van verificatiereferentietypen. De ondersteunde referenties zijn referenties waarmee u bent aangemeld bij ontwikkelhulpprogramma's, zoals de Azure CLI, Azure PowerShell of Azure Developer CLI.

De Python-voorbeelden uitvoeren

Voor elk codevoorbeeld in dit artikel:

  1. Maak een nieuw bestand in een teksteditor.

  2. Voeg het codevoorbeeld toe aan het bestand.

  3. Sla het bestand op in uw projectmap met een .py-extensie, zoals postgres-insert.py. In Windows moet u ervoor zorgen dat UTF-8-codering is geselecteerd wanneer u het bestand opslaat.

  4. Typ de projectmap python , gevolgd door de bestandsnaam, bijvoorbeeld python postgres-insert.py.

Een tabel maken en gegevens invoegen

Het volgende codevoorbeeld maakt verbinding met uw flexibele Azure Database for PostgreSQL-serverdatabase met behulp van de psycopg.connect functie en laadt gegevens met een SQL INSERT-instructie . De cursor.execute functie voert de SQL-query uit op de database.

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

Wanneer de code wordt uitgevoerd, wordt de volgende uitvoer gegenereerd:

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

Gegevens lezen

Het volgende codevoorbeeld maakt verbinding met uw flexibele Azure Database for PostgreSQL-serverdatabase en gebruikt cursor.execute met de SQL SELECT-instructie om gegevens te lezen. Deze functie accepteert een query en retourneert een resultatenset die met behulp van cursor.fetchall() kan worden herhaald.

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

Wanneer de code wordt uitgevoerd, wordt de volgende uitvoer gegenereerd:

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

Gegevens bijwerken

Het volgende codevoorbeeld maakt verbinding met uw flexibele Azure Database for PostgreSQL-serverdatabase en gebruikt cursor.execute met de SQL UPDATE-instructie om gegevens bij te werken.

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

Gegevens verwijderen

Het volgende codevoorbeeld maakt verbinding met uw flexibele Azure Database for PostgreSQL-serverdatabase en gebruikt cursor.execute met de SQL DELETE-instructie om een inventarisitem te verwijderen dat u eerder hebt ingevoegd.

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

Volgende stappen