Snabbstart: Använda Python för att ansluta och fråga efter data i Azure Database for PostgreSQL – flexibel server
GÄLLER FÖR: Azure Database for PostgreSQL – flexibel server
I den här snabbstarten ansluter du till en flexibel Azure Database for PostgreSQL-serverinstans med hjälp av Python. Sedan använder du SQL-instruktioner för att fråga, infoga, uppdatera och ta bort data i databasen från macOS-, Ubuntu Linux- och Windows-plattformar.
Stegen i den här artikeln innehåller två autentiseringsmetoder: Microsoft Entra-autentisering och PostgreSQL-autentisering. Fliken Lösenordslös visar Microsoft Entra-autentiseringen och fliken Lösenord visar PostgreSQL-autentisering.
Microsoft Entra-autentisering är en mekanism för att ansluta till Azure Database for PostgreSQL med hjälp av identiteter som definierats i Microsoft Entra-ID. Med Microsoft Entra-autentisering kan du hantera databasanvändares identiteter och andra Microsoft-tjänster på en central plats, vilket förenklar behörighetshanteringen. Mer information finns i Microsoft Entra-autentisering med Azure Database for PostgreSQL – flexibel server.
PostgreSQL-autentisering använder konton som lagras i PostgreSQL. Om du väljer att använda lösenord som autentiseringsuppgifter för kontona lagras dessa autentiseringsuppgifter i user
tabellen. Eftersom dessa lösenord lagras i PostgreSQL måste du hantera rotationen av lösenorden själv.
Den här artikeln förutsätter att du är bekant med att utveckla med Python, men du är nybörjare på att arbeta med Azure Database for PostgreSQL – flexibel server.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
- En flexibel Azure Database for PostgreSQL-serverinstans. Om du vill skapa en flexibel Azure Database for PostgreSQL-serverinstans läser du Skapa en Azure Database for PostgreSQL – flexibel serverinstans med hjälp av Azure Portal.
- Python 3.8+.
- Senaste pip-paketinstallationsprogrammet .
Lägga till brandväggsregler för klientarbetsstationen
- Om du har skapat en flexibel Azure Database for PostgreSQL-serverinstans med privat åtkomst (VNet-integrering) måste du ansluta till servern från en resurs inom samma virtuella nätverk som servern. Du kan skapa en virtuell dator och lägga till den i det virtuella nätverk som skapats med din flexibla Azure Database for PostgreSQL-serverinstans. Se Skapa och hantera azure database for PostgreSQL – flexibelt servernätverk med Azure CLI.
- Om du har skapat din flexibla Azure Database for PostgreSQL-serverinstans med offentlig åtkomst (tillåtna IP-adresser) kan du lägga till din lokala IP-adress i listan över brandväggsregler på servern. Se Skapa och hantera Azure Database for PostgreSQL – brandväggsregler för flexibel server med hjälp av Azure CLI.
Konfigurera Microsoft Entra-integrering på servern (endast lösenordslös)
Om du följer stegen för lösenordslös autentisering måste Microsoft Entra-autentisering konfigureras för din serverinstans och du måste tilldelas som Microsoft Entra-administratör på serverinstansen. Följ stegen i Konfigurera Microsoft Entra-integrering för att säkerställa att Microsoft Entra-autentisering har konfigurerats och att du har tilldelats som Microsoft Entra-administratör på serverinstansen.
Förbereda utvecklingsmiljön
Ändra till en mapp där du vill köra koden och skapa och aktivera en virtuell miljö. En virtuell miljö är en fristående katalog för en viss version av Python plus de andra paket som behövs för programmet.
Kör följande kommandon för att skapa och aktivera en virtuell miljö:
py -3 -m venv .venv
.venv\Scripts\activate
Installera Python-biblioteken
Installera De Python-bibliotek som behövs för att köra kodexemplen.
Installera azure-identity-biblioteket, som tillhandahåller stöd för Microsoft Entra-tokenautentisering i Hela Azure SDK.
pip install azure-identity
Lägga till autentiseringskod
I det här avsnittet lägger du till autentiseringskod i arbetskatalogen och utför eventuella ytterligare steg som krävs för autentisering och auktorisering med din serverinstans.
Kopiera följande kod till en redigerare och spara den i en fil med namnet 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
Hämta information om databasanslutning.
- I Azure Portal söker du efter och väljer ditt flexibla servernamn för Azure Database for PostgreSQL.
- På serverns översiktssida kopierar du det fullständigt kvalificerade servernamnet. Det fullständigt kvalificerade servernamnet är alltid av formatet <my-server-name.postgres.database.azure.com>.
- På den vänstra menyn, under Säkerhet, väljer du Autentisering. Kontrollera att ditt konto visas under Microsoft Entra-administratörer. Om det inte är det slutför du stegen i Konfigurera Microsoft Entra-integrering på servern (endast lösenordslös).
Ange miljövariabler för anslutnings-URI-elementen:
set DBHOST=<server-name> set DBNAME=<database-name> set DBUSER=<username> set SSLMODE=require
Ersätt följande platshållarvärden i kommandona:
<server-name>
med det värde som du kopierade från Azure Portal.<username>
med ditt Azure-användarnamn; till exempel.john@contoso.com
.<database-name>
med namnet på din flexibla Azure Database for PostgreSQL-serverdatabas. En standarddatabas med namnet postgres skapades automatiskt när du skapade servern. Du kan använda databasen eller skapa en ny databas med hjälp av SQL-kommandon.
Logga in på Azure på din arbetsstation. Du kan logga in med Azure CLI, Azure PowerShell eller Azure Developer CLI. Om du till exempel vill logga in via Azure CLI anger du det här kommandot:
az login
Autentiseringskoden använder
DefaultAzureCredential
för att autentisera med Microsoft Entra-ID och hämta en token som ger dig behörighet att utföra åtgärder på serverinstansen.DefaultAzureCredential
stöder en kedja av autentiseringsautentiseringstyper. Bland de autentiseringsuppgifter som stöds finns autentiseringsuppgifter som du är inloggad på utvecklarverktyg med som Azure CLI, Azure PowerShell eller Azure Developer CLI.
Så här kör du Python-exemplen
För varje kodexempel i den här artikeln:
Skapa en ny fil i en textredigerare.
Lägg till kodexemplet i filen.
Spara filen i projektmappen med ett .py tillägg, till exempel postgres-insert.py. För Windows kontrollerar du att UTF-8-kodning är markerat när du sparar filen.
I projektmappens typ
python
följt av filnamnet, till exempelpython postgres-insert.py
.
Skapa en tabell och infoga data
Följande kodexempel ansluter till din flexibla Azure Database for PostgreSQL-serverdatabas med hjälp av psycopg.connect
funktionen och läser in data med en SQL INSERT-instruktion . Funktionen cursor.execute
kör SQL-frågan mot databasen.
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()
När koden körs genererar den följande utdata:
Connection established
Finished dropping table (if existed)
Finished creating table
Inserted 3 rows of data
Läsa data
Följande kodexempel ansluter till din flexibla serverdatabas i Azure Database for PostgreSQL och använder cursor.execute med SQL SELECT-instruktionen för att läsa data. Den här funktionen accepterar en fråga och returnerar en resultatuppsättning som itererar över med hjälp av 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()
När koden körs genererar den följande utdata:
Connection established
Data row = (1, banana, 150)
Data row = (2, orange, 154)
Data row = (3, apple, 100)
Uppdatera data
Följande kodexempel ansluter till din flexibla serverdatabas i Azure Database for PostgreSQL och använder cursor.execute med SQL UPDATE-instruktionen för att uppdatera data.
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()
Ta bort data
Följande kodexempel ansluter till din flexibla serverdatabas i Azure Database for PostgreSQL och använder cursor.execute med SQL DELETE-instruktionen för att ta bort ett lagerobjekt som du tidigare infogade.
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()