Sdílet prostřednictvím


Připojení ke službě Azure SQL Database a dotazování na ji pomocí Pythonu a ovladače mssql-python

Platí pro:Azure SQL Database

Tento rychlý start popisuje, jak připojit aplikaci k databázi ve službě Azure SQL Database a provádět dotazy pomocí Pythonu a ovladače mssql-python. Ovladač mssql-python má integrovanou podporu ověřování Microsoft Entra, což usnadňuje připojení bez hesel. Další informace o připojeních bez hesel najdete v centru bez hesel.

Požadavky

Konfigurace databáze

Zabezpečená bez hesla připojení ke službě Azure SQL Database vyžadují určité konfigurace databáze. Ověřte na logickém serveru v Azure následující nastavení, abyste se mohli správně připojit ke službě Azure SQL Database v místním i hostovaným prostředí:

  1. V případě místních vývojových připojení se ujistěte, že je logický server Azure SQL nakonfigurovaný tak, aby umožňoval připojení IP adresy místního počítače a dalších služeb Azure:

    1. Na webu Azure Portal v nabídce prostředků v části Zabezpečení vyberte Sítě.

    2. Výběrem tlačítka Vybrané sítě zobrazíte další možnosti konfigurace.

    3. Vyberte Přidat adresu IPv4 klienta (xx.xx.xx.xx) a přidejte pravidlo brány firewall, které povolí připojení z adresy IPv4 místního počítače. Případně můžete také vybrat + Přidat pravidlo brány firewall a zadat konkrétní IP adresu podle vašeho výběru.

    4. Ujistěte se, že je zaškrtnuté políčko Povolit službám a prostředkům Azure přístup k tomuto serveru .

      Snímek obrazovky webu Azure Portal znázorňující, jak nakonfigurovat pravidla brány firewall logického serveru Azure SQL

      Varování

      Povolení přístupu ke službám a prostředkům Azure pro přístup k tomuto nastavení serveru není doporučeným postupem zabezpečení pro produkční scénáře. Skutečné aplikace by měly implementovat bezpečnější přístupy, jako jsou silnější omezení brány firewall nebo konfigurace virtuální sítě.

      Další informace o konfiguracích zabezpečení databáze najdete v následujících zdrojích informací:

  2. Server musí mít také povolené ověřování Microsoft Entra a musí mít přiřazený účet správce Microsoft Entra. Pro místní vývojová připojení by měl být účet správce Microsoft Entra účtem, ke kterým se můžete také přihlásit do sady Visual Studio nebo Azure CLI místně. Můžete ověřit, zda má váš server povolené ověřování Microsoft Entra na stránce Microsoft Entra ID vašeho logického serveru.

    Snímek obrazovky znázorňující povolení ověřování Microsoft Entra

  3. Pokud používáte osobní účet Azure, ujistěte se, že máte Microsoft Entra nastavené a nakonfigurované pro Azure SQL Database, abyste mohli účet přiřadit jako správce serveru. Pokud používáte podnikový účet, pravděpodobně pro vás již bude nakonfigurované ID Microsoft Entra.

Vytvoření projektu

Vytvořte nový projekt Pythonu pomocí editoru Visual Studio Code.

  1. Otevřete Visual Studio Code, vytvořte pro svůj projekt novou složku a přejděte do daného adresáře.

    mkdir python-sql-azure
    cd python-sql-azure
    
  2. Vytvořte pro aplikaci virtuální prostředí.

    py -m venv .venv
    .venv\scripts\activate
    
  3. Vytvořte nový soubor Pythonu s názvem app.py.

Instalace ovladače mssql-python

Pokud se chcete připojit ke službě Azure SQL Database pomocí Pythonu mssql-python , nainstalujte ovladač. Tento ovladač má integrovanou podporu ověřování Microsoft Entra a eliminuje potřebu ručního zpracování tokenů. V tomto rychlém startu také nainstalujete fastapi, uvicorna pydantic balíčky pro vytvoření a spuštění rozhraní API.

Poznámka:

V systému macOS a Linux jsou před instalací mssql-pythonvyžadovány systémové závislosti . Pokyny pro konkrétní platformu najdete v tématu Instalace balíčku mssql-python .

  1. Vytvořte soubor requirements.txt s následujícími řádky:

    mssql-python
    fastapi
    uvicorn[standard]
    pydantic
    python-dotenv
    
  2. Nainstalujte požadavky.

    pip install -r requirements.txt
    

Konfigurovat místní připojovací řetězec

Pro místní vývoj vytvořte .env ve složce projektu soubor pro uložení připojovacího řetězce. Tím udržujete přihlašovací údaje mimo váš kód a verzovací systém.

  1. Ve složce projektu vytvořte nový soubor s názvem .env.

  2. Přidejte proměnnou AZURE_SQL_CONNECTIONSTRING s vaším připojovacím řetězcem. Nahraďte zástupné symboly <database-server-name> a <database-name> vlastními hodnotami.

Ovladač mssql-python má integrovanou podporu ověřování Microsoft Entra. Pomocí parametru Authentication zadejte metodu ověřování.

ActiveDirectoryDefault automaticky zjistí přihlašovací údaje z více zdrojů bez nutnosti interaktivního přihlášení. Toto je doporučená možnost pro místní vývoj.

V případě nejspolehlivějšího místního vývojového prostředí se nejprve přihlaste pomocí Azure CLI:

az login

Pak v .env souboru použijte tento formát připojovacího řetězce:

AZURE_SQL_CONNECTIONSTRING=Server=<database-server-name>.database.windows.net;Database=<database-name>;Authentication=ActiveDirectoryDefault;Encrypt=yes;TrustServerCertificate=no;

ActiveDirectoryDefault vyhodnotí přihlašovací údaje v následujícím pořadí:

  1. Proměnné prostředí (pro přihlašovací údaje služebního principálu)
  2. Spravovaná identita (při spuštění v Azure)
  3. Azure CLI (z az login)
  4. Visual Studio (jenom Windows)
  5. Azure PowerShell (z Connect-AzAccount)

Návod

V produkčních aplikacích použijte pro svůj scénář konkrétní metodu ověřování, abyste se vyhnuli latenci zjišťování přihlašovacích údajů:

  • Azure App Service/Functions: Použití ActiveDirectoryMSI (spravovaná identita)
  • Interaktivní přihlášení uživatele: Použití ActiveDirectoryInteractive
  • Principál služby: Použití ActiveDirectoryServicePrincipal

Podrobnosti o vytvoření připojovací řetězec můžete získat z webu Azure Portal:

  1. Přejděte na Azure SQL Server, vyberte stránku databáze SQL a vyhledejte název databáze a vyberte databázi.

  2. V databázi přejděte na stránku Přehled a získejte název serveru.

Přidání kódu pro připojení ke službě Azure SQL Database

Ve složce projektu vytvořte soubor app.py a přidejte vzorový kód. Tento kód vytvoří rozhraní API, které:

  • Načte konfiguraci ze .env souboru pomocí python-dotenv.
  • Načte připojovací řetězec Azure SQL Database z proměnné prostředí.
  • Persons Vytvoří tabulku v databázi během spouštění (pouze pro testovací scénáře).
  • Definuje funkci pro načtení všech Person záznamů z databáze.
  • Definuje funkci pro načtení jednoho Person záznamu z databáze.
  • Definuje funkci pro přidání nových Person záznamů do databáze.
from os import getenv
from typing import Union
from dotenv import load_dotenv
from fastapi import FastAPI
from pydantic import BaseModel
from mssql_python import connect

load_dotenv()

class Person(BaseModel):
    first_name: str
    last_name: Union[str, None] = None

connection_string = getenv("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("""
            IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Persons')
            CREATE TABLE Persons (
                ID int NOT NULL PRIMARY KEY IDENTITY,
                FirstName varchar(255),
                LastName varchar(255)
            );
        """)

        conn.commit()
        conn.close()
    except Exception as e:
        # Table might 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("INSERT INTO Persons (FirstName, LastName) VALUES (?, ?)",
                       (item.first_name, item.last_name))
        conn.commit()

    return item

def get_conn():
    """Connect using mssql-python with built-in Microsoft Entra authentication."""
    conn = connect(connection_string)
    conn.setautocommit(True)
    return conn

Varování

Ukázkový kód zobrazuje nezpracované příkazy SQL, které by se neměly používat v produkčním kódu. Místo toho použijte balíček ORM (Object Relational Mapper), jako je SqlAlchemy , který vygeneruje bezpečnější vrstvu objektu pro přístup k databázi.

Místní spuštění a otestování aplikace

Aplikace je připravená k místnímu otestování.

  1. Spusťte soubor app.py v editoru Visual Studio Code.

    uvicorn app:app --reload
    
  2. Na stránce Swagger UI aplikace http://127.0.0.1:8000/docsrozbalte metodu POST a vyberte Vyzkoušet.

    Můžete se také pokusit použít /redoc, abyste viděli jinou formu vygenerované dokumentace pro rozhraní API.

  3. Upravte ukázkový KÓD JSON tak, aby obsahoval hodnoty pro křestní jméno a příjmení. Vyberte Spustit a přidejte do databáze nový záznam. API vrátí úspěšnou odpověď.

  4. Rozbalte metodu GET na stránce Swagger UI a vyberte Vyzkoušet. Zvolte Spustit a osoba, kterou jste právě vytvořili, se vrátí.

Nasazení do Azure App Service

Aplikace je připravená k nasazení do Azure.

  1. Vytvořte soubor start.sh tak, aby gunicorn v Aplikace Azure Service mohl spustit uvicorn. Start.sh má jeden řádek:

    gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:app
    
  2. Pomocí příkazu az webapp up nasaďte kód do služby App Service. (Pomocí této možnosti -dryrun můžete zjistit, co příkaz dělá bez vytvoření prostředku.)

    az webapp up \
        --resource-group <resource-group-name> \
        --name <web-app-name>         
    
  3. Pomocí příkazu az webapp config set nakonfigurujte službu App Service tak, aby používala soubor start.sh.

    az webapp config set \
        --resource-group <resource-group-name> \
        --name <web-app-name> \
        --startup-file start.sh
    
  4. Pomocí příkazu az webapp identity assign povolíte systémem přiřazenou spravovanou identitu pro službu App Service.

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

    V tomto rychlém startu se spravovaná identita přiřazená systémem používá pro demonstrační účely. Spravovaná identita přiřazená uživatelem je efektivnější v širším rozsahu scénářů. Další informace najdete v doporučeních k osvědčeným postupům spravované identity. Příklad použití spravované identity přiřazené uživatelem s mssql-python najdete v tématu Migrace aplikace Python pro použití bez hesel s Azure SQL Database.

Připojení služby App Service ke službě Azure SQL Database

V části Konfigurace databáze jste nakonfigurovali sítě a ověřování Microsoft Entra pro server databáze Azure SQL. V této části dokončíte konfiguraci databáze a nakonfigurujete službu App Service s připojovací řetězec pro přístup k databázovému serveru.

Ke spuštění těchto příkazů můžete použít libovolný nástroj nebo integrované vývojové prostředí , které se můžou připojit ke službě Azure SQL Database, včetně aplikace SQL Server Management Studio (SSMS) a editoru Visual Studio Code s rozšířením MSSQL. Můžete také použít Azure Portal, jak je popsáno v rychlém startu: Dotazování služby Azure SQL Database pomocí editoru dotazů na webu Azure Portal.

  1. Přidejte uživatele do služby Azure SQL Database pomocí příkazů SQL pro vytvoření uživatele a role pro přístup bez hesla.

    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>]
    

    Další informace najdete v tématu Uživatelé databáze s omezením – zajištění přenositelnosti databáze. Příklad, který ukazuje stejný princip, ale použitý na virtuální počítač Azure, najdete v kurzu : Použití spravované identity přiřazené systémem na virtuálním počítači s Windows pro přístup k Azure SQL. Další informace o přiřazených rolích naleznete v tématu Pevné databázové role.

    Pokud zakážete a potom povolíte spravovanou identitu přiřazenou systémem služby App Service, pak uživatele zahoďte a znovu ji vytvořte. Spusťte DROP USER [<web-app-name>] a znovu spusťte příkazy CREATE a ALTER. Pokud chcete zobrazit uživatele, použijte SELECT * FROM sys.database_principals.

  2. Pomocí příkazu az webapp config appsettings set přidejte nastavení aplikace pro řetězec připojení.

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

    U nasazené aplikace by se připojovací řetězec měla podobat:

    Server=<database-server-name>.database.windows.net;Database=<database-name>;Authentication=ActiveDirectoryMSI;Encrypt=yes;TrustServerCertificate=no;
    

    Vyplňte <database-server-name> a <database-name> svými hodnotami.

    Připojovací řetězec bez hesla neobsahuje uživatelské jméno ani heslo. Místo toho, když aplikace běží v Azure, ovladač mssql-python používá ActiveDirectoryMSI režim ověřování k automatickému ověření pomocí spravované identity služby App Service.

Otestování nasazené aplikace

Přejděte na adresu URL aplikace a otestujte, že funguje připojení ke službě Azure SQL Database. Adresu URL aplikace najdete na stránce přehledu služby App Service.

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

Přidejte /docs k adrese URL pro zobrazení uživatelského rozhraní Swagger a otestování metod rozhraní API.

Gratulujeme! Vaše aplikace je teď připojená ke službě Azure SQL Database v místním i hostovaným prostředí.