Megosztás a következőn keresztül:


Csatlakozás az Azure SQL Database-hez és lekérdezés a Python és az mssql-python illesztőprogram használatával

A következőkre vonatkozik:Azure SQL Database

Ez a rövid útmutató bemutatja, hogyan csatlakoztathat egy alkalmazást egy Adatbázishoz az Azure SQL Database-ben, és hogyan hajthat végre lekérdezéseket a Python és az mssql-Python illesztőprogram használatával. Az mssql-python illesztőprogram beépített támogatást nyújt a Microsoft Entra-hitelesítéshez, így egyszerűvé válik a jelszó nélküli kapcsolatok használata. További információt találhatsz a jelszó nélküli kapcsolatokról a jelszó nélküli platformon.

Előfeltételek

Az adatbázis konfigurálása

Az Azure SQL Database biztonságos, jelszó nélküli kapcsolataihoz bizonyos adatbázis-konfigurációk szükségesek. Ellenőrizze a következő beállításokat a logikai kiszolgálón az Azure-ben, hogy megfelelően csatlakozzon az Azure SQL Database-hez helyi és üzemeltetett környezetekben is:

  1. Helyi fejlesztési kapcsolatok esetén győződjön meg arról, hogy az Azure SQL logikai kiszolgálója úgy van konfigurálva, hogy a helyi gép IP-címe és más Azure-szolgáltatások kapcsolódhassanak:

    1. Az Azure Portal erőforrásmenüjének Biztonság területén válassza a Hálózatkezelés lehetőséget.

    2. A Kiválasztott hálózatok gombra kattintva további konfigurációs beállításokat jeleníthet meg.

    3. Válassza Adja hozzá az ügyfél IPv4-címét (xx.xx.xx.xx.xx) egy tűzfalszabály hozzáadásához, amely engedélyezi a helyi gép IPv4-címéről érkező kapcsolatokat. Másik lehetőségként választhatja a + Tűzfalszabály hozzáadása lehetőséget is egy tetszőleges IP-cím megadásához.

    4. Győződjön meg arról, hogy a Az Azure-szolgáltatások és -erőforrások hozzáférésének engedélyezése a kiszolgálóhoz jelölőnégyzet be van jelölve.

      Képernyőkép az Azure Portalról az Azure SQL logikai kiszolgáló tűzfalszabályainak konfigurálásáról.

      Figyelmeztetés

      A „Az Azure-szolgáltatások és -erőforrások hozzáférésének engedélyezése ehhez a kiszolgálóhoz” beállítás engedélyezése nem ajánlott biztonsági gyakorlat éles helyzetekben. A valós alkalmazásoknak biztonságosabb megközelítéseket kell implementálniuk, például erősebb tűzfalkorlátozásokat vagy virtuális hálózati konfigurációkat.

      Az adatbázis biztonsági konfigurációiról az alábbi forrásokban olvashat bővebben:

  2. A kiszolgálónak engedélyeznie kell a Microsoft Entra-hitelesítést is, és hozzá kell rendelnie egy Microsoft Entra rendszergazdai fiókot. Helyi fejlesztési kapcsolatok esetén a Microsoft Entra rendszergazdai fióknak olyan fióknak kell lennie, amellyel helyileg is bejelentkezhet a Visual Studióba vagy az Azure CLI-be. Ellenőrizheti, hogy a kiszolgálón engedélyezve van-e a Microsoft Entra-hitelesítés a logikai kiszolgáló Microsoft Entra-azonosító lapján.

    Képernyőkép a Microsoft Entra-hitelesítés engedélyezéséről.

  3. Ha személyes Azure-fiókot használ, győződjön meg arról, hogy Microsoft Entra-t állította be és konfigurálta az Azure SQL Database- a fiók kiszolgálói rendszergazdaként való hozzárendeléséhez. Ha vállalati fiókot használ, a Microsoft Entra-azonosító valószínűleg már konfigurálva lesz Az Ön számára.

A projekt létrehozása

Hozzon létre egy új Python-projektet a Visual Studio Code használatával.

  1. Nyissa meg a Visual Studio Code-ot, hozzon létre egy új mappát a projekthez, és váltson erre a könyvtárra.

    mkdir python-sql-azure
    cd python-sql-azure
    
  2. Hozzon létre egy virtuális környezetet az alkalmazáshoz.

    py -m venv .venv
    .venv\scripts\activate
    
  3. Hozzon létre egy új Python-fájlt .app.py

Az mssql-python illesztőprogram telepítése

Ha Pythonnal szeretne csatlakozni az Azure SQL Database-hez, telepítse az illesztőprogramot mssql-python . Ez az illesztőprogram beépített támogatást nyújt a Microsoft Entra-hitelesítéshez, így nincs szükség manuális tokenkezelésre. Ebben a gyorsútmutatóban API létrehozásához és futtatásához telepíti a(z) fastapi, uvicorn és pydantic csomagokat.

Megjegyzés:

MacOS és Linux rendszeren a mssql-python telepítése előtt szükség van rendszerfüggőségekre. A platformspecifikus utasításokért tekintse meg az mssql-python csomag telepítését .

  1. Hozzon létre egy requirements.txt fájlt a következő sorokkal:

    mssql-python
    fastapi
    uvicorn[standard]
    pydantic
    python-dotenv
    
  2. Telepítse a követelményeket.

    pip install -r requirements.txt
    

A helyi kapcsolati sztring konfigurálása

Helyi fejlesztéshez hozzon létre egy .env fájlt a projektmappában a kapcsolati sztring tárolásához. A hitelesítő adatok a kódból és a forráskód-kezelésből kimaradnak.

  1. A projektmappában hozzon létre egy új fájlt..env

  2. Adja hozzá a AZURE_SQL_CONNECTIONSTRING változót a kapcsolati sztringhez. Cserélje le a <database-server-name> és <database-name> helyőrzőket a saját értékeire.

Az mssql-python illesztőprogram beépített támogatást nyújt a Microsoft Entra-hitelesítéshez. A paraméter használatával Authentication adja meg a hitelesítési módszert.

ActiveDirectoryDefault automatikusan felderíti a hitelesítő adatokat több forrásból anélkül, hogy interaktív bejelentkezésre van szükség. Ez az ajánlott lehetőség a helyi fejlesztéshez.

A legmegbízhatóbb helyi fejlesztési élmény érdekében először jelentkezzen be az Azure CLI-vel:

az login

Ezután használja ezt a kapcsolati sztringformátumot a .env fájlban:

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

ActiveDirectoryDefault a hitelesítő adatokat a következő sorrendben értékeli ki:

  1. Környezeti változók (a szolgáltatásnévhez tartozó hitelesítő adatokhoz)
  2. Kezelt identitás (Azure-ban futtatva)
  3. Azure CLI (forrás az login)
  4. Visual Studio (csak Windows rendszeren)
  5. Azure PowerShell (forrás Connect-AzAccount)

Jótanács

Éles alkalmazások esetén használja az adott hitelesítési módszert a forgatókönyvhöz a hitelesítő adatok felderítésének késésének elkerülése érdekében:

  • Azure App Service/Functions: Használja ActiveDirectoryMSI (felügyelt identitás)
  • Interaktív felhasználói bejelentkezés: Használat ActiveDirectoryInteractive
  • Szolgáltatásnév: Használat ActiveDirectoryServicePrincipal

A kapcsolati sztring létrehozásához szükséges részleteket az Azure Portalról szerezheti be:

  1. Nyissa meg az Azure SQL Servert, válassza ki az SQL-adatbázisok lapot az adatbázis nevének megkereséséhez, majd válassza ki az adatbázist.

  2. Az adatbázisban lépjen az Áttekintés lapra a kiszolgáló nevének lekéréséhez.

Kód hozzáadása az Azure SQL Database-hez való csatlakozáshoz

A projektmappában hozzon létre egy app.py fájlt, és adja hozzá a mintakódot. Ez a kód létrehoz egy API-t, amely:

  • Betölti a konfigurációt egy .env fájlból az python-dotenv használatával.
  • Lekéri az Azure SQL Database kapcsolati sztringet egy környezeti változóból.
  • Létrehoz egy táblát Persons az adatbázisban az indítás során (csak tesztelési forgatókönyvekhez).
  • Definiál egy függvényt, amely lekéri az összes Person rekordot az adatbázisból.
  • Egy függvényt határoz meg, amely egy Person rekordot kér le az adatbázisból.
  • Definiál egy függvényt, amely új Person rekordokat ad hozzá az adatbázishoz.
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

Figyelmeztetés

A mintakód nyers SQL-utasításokat jelenít meg, amelyeket nem szabad használni az éles kódban. Ehelyett használjon egy objektumrelációs leképező (ORM) csomagot, például az SqlAlchemyt , amely biztonságosabb objektumréteget hoz létre az adatbázis eléréséhez.

Az alkalmazás helyi futtatása és tesztelése

Az alkalmazás készen áll a helyi tesztelésre.

  1. Futtassa a Visual Studio Code-ban a app.py fájlt.

    uvicorn app:app --reload
    
  2. Az alkalmazás http://127.0.0.1:8000/docsSwagger felhasználói felületén bontsa ki a POST metódust, és válassza a Kipróbálás lehetőséget.

    Az API-hoz létrehozott dokumentáció egy másik formáját is megpróbálhatja /redoc megtekinteni.

  3. Módosítsa a JSON-mintát úgy, hogy az tartalmazza az utó- és vezetéknév értékeit. Válassza a Végrehajtás lehetőséget, ha új rekordot szeretne hozzáadni az adatbázishoz. Az API sikeres választ ad vissza.

  4. Bontsa ki a GET metódust a Swagger felhasználói felületén, és válassza a Kipróbálás lehetőséget. Válassza a Végrehajtáslehetőséget, ekkor az imént létrehozott személy visszatér.

Üzembe helyezés az Azure App Service-ben

Az alkalmazás készen áll az Azure-ban való üzembe helyezésre.

  1. Hozzon létre egy start.sh fájlt, hogy az Azure App Service alatt futhasson a gunicorn, amely a uvicorn-t indítja el. A start.sh egy sorból áll:

    gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:app
    
  2. A az webapp up használatával üzembe helyezheti a kódot az App Service-re. (A beállítással -dryrun megtekintheti, hogy a parancs mit tesz az erőforrás létrehozása nélkül.)

    az webapp up \
        --resource-group <resource-group-name> \
        --name <web-app-name>         
    
  3. Az az webapp config set paranccsal konfigurálja az App Service-t a start.sh fájl használatára.

    az webapp config set \
        --resource-group <resource-group-name> \
        --name <web-app-name> \
        --startup-file start.sh
    
  4. Az az webapp identity assign paranccsal engedélyezheti a rendszer által hozzárendelt felügyelt identitást az App Service-ben.

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

    Ebben a rövid útmutatóban egy rendszer által hozzárendelt felügyelt identitást használunk bemutató célokra. A felhasználók által hozzárendelt felügyelt identitások a forgatókönyvek szélesebb körében hatékonyabbak. További információkért tekintse meg a felügyelt identitásokkal kapcsolatos ajánlott eljárásokkal kapcsolatos javaslatokat. Ha például felhasználó által hozzárendelt felügyelt identitást szeretne használni az mssql-pythonnal, olvassa el a Python-alkalmazások migrálását jelszó nélküli kapcsolatok azure SQL Database-hez való használatához.

Az App Service csatlakoztatása az Azure SQL Database-hez

Az adatbázis konfigurálása szakaszban a hálózatkezelést és a Microsoft Entra-hitelesítést konfigurálta az Azure SQL-adatbáziskiszolgálóhoz. Ebben a szakaszban végrehajtja az adatbázis-konfigurációt, és egy kapcsolati sztringgel konfigurálja az App Service-t az adatbázis-kiszolgáló eléréséhez.

A parancsok futtatásához használhat bármilyen eszközt vagy IDE-t, amely csatlakozhat az Azure SQL Database-hez, beleértve az SQL Server Management Studiót (SSMS) és a Visual Studio Code-ot az MSSQL-bővítménnyel. Az Azure Portalt a rövid útmutatóban leírtak szerint is használhatja : Az Azure Portal lekérdezésszerkesztőjével kérdezheti le az Azure SQL Database-t.

  1. Adjon hozzá egy felhasználót az Azure SQL Database-hez SQL-parancsokkal, hogy létrehozhasson egy felhasználót és egy szerepkört a jelszó nélküli hozzáféréshez.

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

    További információ: Tartalmazott adatbázis felhasználói – Az adatbázis hordozhatóvá tétele. Egy, az Azure-beli virtuális gépre alkalmazott alapelvet bemutató példa : Oktatóanyag: Windows rendszerű virtuális gép által hozzárendelt felügyelt identitás használata az Azure SQL eléréséhez. A hozzárendelt szerepkörökről további információt a Rögzített adatbázis szerepkörei című témakörben talál.

    Ha letiltja, majd engedélyezi az App Service rendszer által hozzárendelt kezelt identitást, akkor törölje a felhasználót az adatbázisból és hozza létre újra. Futtassa a DROP USER [<web-app-name>] parancsot, majd a CREATE és ALTER parancsokat újra. A felhasználók megtekintéséhez használja a következőt: SELECT * FROM sys.database_principals.

  2. Az az webapp config appsettings set paranccsal adjon hozzá egy alkalmazásbeállítást a kapcsolati lánchoz.

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

    Az üzembe helyezett alkalmazás esetében a kapcsolati sztringnek a következőhöz hasonlónak kell lennie:

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

    Töltse ki a <database-server-name> és <database-name> helyet a saját értékeivel.

    A jelszó nélküli kapcsolati sztring nem tartalmaz felhasználónevet vagy jelszót. Ehelyett, amikor az alkalmazás az Azure-ban fut, az mssql-python illesztőprogram a hitelesítési módot használja az ActiveDirectoryMSI App Service felügyelt identitásával történő automatikus hitelesítéshez.

Az üzembe helyezett alkalmazás tesztelése

Keresse meg az alkalmazás URL-címét, és ellenőrizze, hogy működik-e a kapcsolat az Azure SQL Database-hez. Az alkalmazás URL-címét az App Service áttekintési oldalán találja.

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

Fűzze hozzá /docs az URL-címet a Swagger felhasználói felületének megtekintéséhez és az API-metódusok teszteléséhez.

Gratulálok! Az alkalmazás mostantól helyi és üzemeltetett környezetben is csatlakozik az Azure SQL Database-hez.