Delen via


Verbinding maken azure SQL Database doorzoeken en er query's op uitvoeren met behulp van Python en het pyodbc-stuurprogramma

Van toepassing op: Azure SQL Database

In deze quickstart wordt beschreven hoe u een toepassing verbindt met een database in Azure SQL Database en query's uitvoert met behulp van Python en het Python SQL-stuurprogramma pyodbc. Deze quickstart volgt de aanbevolen benadering zonder wachtwoord om verbinding te maken met de database. Meer informatie over verbindingen zonder wachtwoord vindt u in de hub zonder wachtwoord.

Vereisten

  • Een Azure-abonnement.
  • Een Azure SQL-database die is geconfigureerd met Microsoft Entra-verificatie. U kunt er een maken met behulp van de quickstart Database maken.
  • De nieuwste versie van de Azure CLI.
  • Visual Studio Code met de Python-extensie.
  • Python 3.8 of hoger.

De database configureren

Voor beveiligde, wachtwoordloze verbindingen met Azure SQL Database zijn bepaalde databaseconfiguraties vereist. Controleer de volgende instellingen op uw logische server in Azure om verbinding te maken met Azure SQL Database in zowel lokale als gehoste omgevingen:

  1. Voor lokale ontwikkelingsverbindingen moet u ervoor zorgen dat uw logische server zo is geconfigureerd dat het IP-adres van uw lokale computer en andere Azure-services verbinding kunnen maken:

    • Navigeer naar de pagina Netwerken van uw server.

    • Schakel het keuzerondje Geselecteerde netwerken in om extra configuratieopties weer te geven.

    • Selecteer Het IPv4-adres van de client toevoegen (xx.xx.xx.xx) om een firewallregel toe te voegen waarmee verbindingen vanaf het IPv4-adres van uw lokale computer worden ingeschakeld. U kunt ook + Een firewallregel toevoegen selecteren om een specifiek IP-adres van uw keuze in te voeren.

    • Zorg ervoor dat het selectievakje Azure-services en -resources toegang tot deze server toestaan is ingeschakeld.

      A screenshot showing how to configure firewall rules.

      Waarschuwing

      Het inschakelen van azure-services en -resources voor toegang tot deze serverinstelling is geen aanbevolen beveiligingspraktijk voor productiescenario's. Echte toepassingen moeten veiligere benaderingen implementeren, zoals sterkere firewallbeperkingen of configuraties van virtuele netwerken.

      Meer informatie over databasebeveiligingsconfiguraties vindt u in de volgende bronnen:

  2. Op de server moet ook Microsoft Entra-verificatie zijn ingeschakeld en moet een Microsoft Entra-beheerdersaccount zijn toegewezen. Voor lokale ontwikkelingsverbindingen moet het Microsoft Entra-beheerdersaccount een account zijn dat u ook kunt aanmelden bij Visual Studio of de Azure CLI met lokaal. U kunt controleren of Microsoft Entra-verificatie is ingeschakeld op de pagina Microsoft Entra-id van uw logische server.

    A screenshot showing how to enable Microsoft Entra authentication.

  3. Als u een persoonlijk Azure-account gebruikt, moet u Ervoor zorgen dat u Microsoft Entra hebt ingesteld en geconfigureerd voor Azure SQL Database om uw account toe te wijzen als serverbeheerder. Als u een bedrijfsaccount gebruikt, wordt de Microsoft Entra-id waarschijnlijk al voor u geconfigureerd.

Het project maken

Maak een nieuw Python-project met Visual Studio Code.

  1. Open Visual Studio Code en maak een nieuwe map voor uw project en wijzig de map erin.

    mkdir python-sql-azure
    cd python-sql-azure
    
  2. Maak een virtuele omgeving voor de app.

    py -m venv .venv
    .venv\scripts\activate
    
  3. Maak een nieuw Python-bestand met de naam app.py.

Het pyodbc-stuurprogramma installeren

Als u verbinding wilt maken met Azure SQL Database met behulp van Python, installeert u het pyodbc stuurprogramma. Dit pakket fungeert als gegevensprovider voor het maken van verbinding met databases, het uitvoeren van opdrachten en het ophalen van resultaten. In deze quickstart installeert flasku ook pakketten uvicornom pydantic een API te maken en uit te voeren.

Zie Ontwikkelomgeving configureren voor pyodbc Python-ontwikkeling voor meer informatie en specifieke instructies voor het installeren van het pyodbc stuurprogramma op alle besturingssystemen.

  1. Maak een requirements.txt-bestand met de volgende regels:

    pyodbc
    fastapi
    uvicorn[standard]
    pydantic
    azure-identity
    
  2. Installeer de vereisten.

    pip install -r requirements.txt
    

De lokale verbindingsreeks configureren

Voeg de volgende AZURE_SQL_CONNECTIONSTRING omgevingsvariabele toe voor lokale ontwikkeling en verbinding maken met Azure SQL Database. Vervang de <database-server-name> tijdelijke aanduidingen door <database-name> uw eigen waarden. Voorbeeldomgevingsvariabelen worden weergegeven voor de Bash-shell.

Interactieve verificatie biedt een optie zonder wachtwoord wanneer u lokaal werkt.

In Windows kan Microsoft Entra Interactive Authentication gebruikmaken van de multifactor authentication-technologie van Microsoft Entra om verbinding in te stellen. In deze modus wordt door de aanmeldings-id op te geven een Dialoogvenster Azure-verificatie geactiveerd en kan de gebruiker het wachtwoord invoeren om de verbinding te voltooien.

export AZURE_SQL_CONNECTIONSTRING='Driver={ODBC Driver 18 for SQL Server};Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30'

Zie Microsoft Entra-id gebruiken met het ODBC-stuurprogramma voor meer informatie. Als u deze optie gebruikt, zoekt u naar het venster waarin u om referenties wordt gevraagd.

U kunt de details ophalen om uw verbindingsreeks te maken vanuit Azure Portal:

  1. Ga naar Azure SQL Server, selecteer de pagina SQL-databases om de naam van uw database te vinden en selecteer de database.

  2. Ga in de database naar de pagina Verbinding maken iontekenreeksen om verbindingsreeks informatie op te halen. Kijk onder het tabblad ODBC .

Notitie

Als u Azure Arc hebt geïnstalleerd en gekoppeld aan uw Azure-abonnement, kunt u ook de beheerde identiteit gebruiken die wordt weergegeven voor de app die is geïmplementeerd in App Service.

Code toevoegen om verbinding te maken met Azure SQL Database

Maak in de projectmap een app.py-bestand en voeg de voorbeeldcode toe. Met deze code maakt u een API die:

  • Haalt een Azure SQL Database-verbindingsreeks op uit een omgevingsvariabele.
  • Hiermee maakt u een Persons tabel in de database tijdens het opstarten (alleen voor testscenario's).
  • Hiermee definieert u een functie voor het ophalen van alle Person records uit de database.
  • Hiermee definieert u een functie voor het ophalen van één Person record uit de database.
  • Hiermee definieert u een functie voor het toevoegen van nieuwe Person records aan de database.
import os
import pyodbc, struct
from azure import identity

from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel

class Person(BaseModel):
    first_name: str
    last_name: Union[str, None] = None
    
connection_string = os.environ["AZURE_SQL_CONNECTIONSTRING"]

app = FastAPI()

@app.get("/")
def root():
    print("Root of Person API")
    try:
        conn = get_conn()
        cursor = conn.cursor()

        # Table should be created ahead of time in production app.
        cursor.execute("""
            CREATE TABLE Persons (
                ID int NOT NULL PRIMARY KEY IDENTITY,
                FirstName varchar(255),
                LastName varchar(255)
            );
        """)

        conn.commit()
    except Exception as e:
        # Table may already exist
        print(e)
    return "Person API"

@app.get("/all")
def get_persons():
    rows = []
    with get_conn() as conn:
        cursor = conn.cursor()
        cursor.execute("SELECT * FROM Persons")

        for row in cursor.fetchall():
            print(row.FirstName, row.LastName)
            rows.append(f"{row.ID}, {row.FirstName}, {row.LastName}")
    return rows

@app.get("/person/{person_id}")
def get_person(person_id: int):
    with get_conn() as conn:
        cursor = conn.cursor()
        cursor.execute("SELECT * FROM Persons WHERE ID = ?", person_id)

        row = cursor.fetchone()
        return f"{row.ID}, {row.FirstName}, {row.LastName}"

@app.post("/person")
def create_person(item: Person):
    with get_conn() as conn:
        cursor = conn.cursor()
        cursor.execute(f"INSERT INTO Persons (FirstName, LastName) VALUES (?, ?)", item.first_name, item.last_name)
        conn.commit()

    return item

def get_conn():
    credential = identity.DefaultAzureCredential(exclude_interactive_browser_credential=False)
    token_bytes = credential.get_token("https://database.windows.net/.default").token.encode("UTF-16-LE")
    token_struct = struct.pack(f'<I{len(token_bytes)}s', len(token_bytes), token_bytes)
    SQL_COPT_SS_ACCESS_TOKEN = 1256  # This connection option is defined by microsoft in msodbcsql.h
    conn = pyodbc.connect(connection_string, attrs_before={SQL_COPT_SS_ACCESS_TOKEN: token_struct})
    return conn

Waarschuwing

De voorbeeldcode toont onbewerkte SQL-instructies, die niet moeten worden gebruikt in productiecode. Gebruik in plaats daarvan een ORM-pakket (Object Relational Mapper), zoals SqlAlchemy waarmee een veiligere objectlaag wordt gegenereerd voor toegang tot uw database.

De app lokaal uitvoeren en testen

De app is gereed om lokaal te worden getest.

  1. Voer het app.py bestand uit in Visual Studio Code.

    uvicorn app:app --reload
    
  2. Vouw op de pagina Swagger UI voor de app http://127.0.0.1:8000/docsde POST-methode uit en selecteer Uitproberen.

    U kunt ook proberen /redoc te gebruiken om een andere vorm van gegenereerde documentatie voor de API te bekijken.

  3. Wijzig de voorbeeld-JSON om waarden voor de voor- en achternaam op te nemen. Selecteer Uitvoeren om een nieuwe record toe te voegen aan de database. De API retourneert een geslaagd antwoord.

  4. Vouw de GET-methode uit op de pagina Swagger UI en selecteer Uitproberen. Kies Uitvoeren en de persoon die u zojuist hebt gemaakt, wordt geretourneerd.

Implementeren naar Azure App Service

De app is klaar om te worden geïmplementeerd in Azure.

  1. Maak een start.sh-bestand zodat gunicorn in Azure-app Service uvicorn kan uitvoeren. De start.sh heeft één regel:

    gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:app
    
  2. Gebruik de az webapp up om de code te implementeren in App Service. (U kunt de optie -dryrun gebruiken om te zien wat de opdracht doet zonder de resource te maken.)

    az webapp up \
        --resource-group <resource-group-name> \
        --name <web-app-name>         
    
  3. Gebruik de opdracht az webapp config set om App Service te configureren voor gebruik van het start.sh-bestand .

    az webapp config set \
        --resource-group <resource-group-name> \
        --name <web-app-name> \
        --startup-file start.sh
    
  4. Gebruik de opdracht az webapp identity assign om een door het systeem toegewezen beheerde identiteit in te schakelen voor de App Service.

    az webapp identity assign \
        --resource-group <resource-group-name> \
        --name <web-app-name>
    

    In deze quickstart wordt een door het systeem toegewezen beheerde identiteit gebruikt voor demonstratie. Een door de gebruiker toegewezen beheerde identiteit is efficiënter in een breder scala aan scenario's. Zie aanbevelingen voor aanbevolen procedures voor beheerde identiteiten voor meer informatie. Zie Een Python-toepassing migreren om verbindingen zonder wachtwoord te gebruiken met Azure SQL Database voor een voorbeeld van het gebruik van een door de gebruiker toegewezen beheerde identiteit met pyodbc.

Verbinding maken de App Service naar Azure SQL Database

In de sectie Database configureren hebt u netwerk- en Microsoft Entra-verificatie geconfigureerd voor de Azure SQL-databaseserver. In deze sectie voltooit u de databaseconfiguratie en configureert u de App Service met een verbindingsreeks voor toegang tot de databaseserver.

Als u deze opdrachten wilt uitvoeren, kunt u elk hulpprogramma of elke IDE gebruiken die verbinding kan maken met Azure SQL Database, waaronder SQL Server Management Studio (SSMS), Azure Data Studio en Visual Studio Code met de MSSQL-extensie voor SQL Server. U kunt ook De Azure-portal gebruiken zoals beschreven in quickstart: De Query-editor van Azure Portal gebruiken om een query uit te voeren op Azure SQL Database.

  1. Voeg een gebruiker toe aan de Azure SQL Database met SQL-opdrachten om een gebruiker en rol te maken voor toegang zonder wachtwoord.

    CREATE USER [<web-app-name>] FROM EXTERNAL PROVIDER
    ALTER ROLE db_datareader ADD MEMBER [<web-app-name>]
    ALTER ROLE db_datawriter ADD MEMBER [<web-app-name>]
    

    Zie Ingesloten databasegebruikers: een draagbare database maken voor meer informatie. Zie Zelfstudie: Een door het Windows-VM-systeem toegewezen beheerde identiteit gebruiken voor toegang tot Azure SQL voor een voorbeeld dat hetzelfde principe weergeeft, maar wordt toegepast op azure-VM's. Zie Rollen met vaste database voor meer informatie over de toegewezen rollen.

    Als u de door het App Service-systeem toegewezen beheerde identiteit uitschakelt en vervolgens inschakelt, verwijdert u de gebruiker en maakt u deze opnieuw. Voer DROP USER [<web-app-name>] de CREATE en ALTER opdrachten opnieuw uit. Als u gebruikers wilt zien, gebruikt u SELECT * FROM sys.database_principals.

  2. Gebruik de opdracht az webapp config appsettings set om een app-instelling voor de verbindingsreeks toe te voegen.

    az webapp config appsettings set \
        --resource-group <resource-group-name> \
        --name <web-app-name> \
        --settings AZURE_SQL_CONNECTIONSTRING="<connection-string>"
    

    Voor de geïmplementeerde app moet de verbindingsreeks er als volgt uitzien:

    Driver={ODBC Driver 18 for SQL Server};Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30
    

    Vul de <dabaser-server-name> en <database-name> uw waarden in.

    De verbindingsreeks zonder wachtwoord bevat geen gebruikersnaam of wachtwoord. In plaats daarvan, wanneer de app wordt uitgevoerd in Azure, wordt de code uit de Azure Identity-bibliotheek gebruikt DefaultAzureCredential om een token op te halen waarmee pyodbcmoet worden gebruikt.

De geïmplementeerde toepassing testen

Blader naar de URL van de app om te testen of de verbinding met Azure SQL Database werkt. U kunt de URL van uw app vinden op de overzichtspagina van App Service.

https://<web-app-name>.azurewebsites.net

Voeg /docs toe aan de URL om de Swagger-gebruikersinterface te bekijken en de API-methoden te testen.

Gefeliciteerd. Uw toepassing is nu verbonden met Azure SQL Database in zowel lokale als gehoste omgevingen.