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


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

A következőre 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 a Python SQL Driver használatával – pyodbc. Ez a rövid útmutató az adatbázishoz való csatlakozás ajánlott jelszó nélküli megközelítését követi. A jelszó nélküli hubon a jelszó nélküli kapcsolatokról tudhat meg többet.

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 az Azure-beli logikai kiszolgálón, hogy megfelelően csatlakozzon az Azure SQL Database-hez helyi és üzemeltetett környezetekben:

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

    • Lépjen a kiszolgáló hálózatkezelési lapjára.

    • A kiválasztott hálózatok választógombjának váltásával további konfigurációs beállításokat jeleníthet meg.

    • Válassza az Ügyfél IPv4-címének (xx.xx.xx.xx ) hozzáadása lehetőséget egy olyan 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, ha egy tetszőleges IP-címet szeretne megadni.

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

      A screenshot showing how to configure firewall rules.

      Figyelmeztetés

      Az Azure-szolgáltatások és -erőforrások hozzáférésének engedélyezése ehhez a kiszolgálói beállításhoz nem ajánlott biztonsági eljárás é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.

    A screenshot showing how to enable Microsoft Entra authentication.

  3. Ha személyes Azure-fiókot használ, győződjön meg arról, hogy a Microsoft Entra be van állítva és konfigurálva van az Azure SQL Database-hez 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, és hozzon létre egy új mappát a projekthez, és módosítsa a könyvtárat.

    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

A pyodbc-illesztőprogram telepítése

Ha Pythonnal szeretne csatlakozni az Azure SQL Database-hez, telepítse az illesztőprogramot pyodbc . Ez a csomag adatszolgáltatóként működik az adatbázisokhoz való csatlakozáshoz, a parancsok végrehajtásához és az eredmények lekéréséhez. Ebben a rövid útmutatóban egy API létrehozásához és pydantic futtatásához telepíthet flaskés uvicornfuttathat csomagokat is.

Az illesztőprogram minden operációs rendszerre való telepítésével kapcsolatos részletekért és konkrét utasításokért tekintse meg a pyodbc Pyodbc Python-fejlesztés fejlesztési környezetének konfigurálását ismertető cikket.

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

    pyodbc
    fastapi
    uvicorn[standard]
    pydantic
    azure-identity
    
  2. Telepítse a követelményeket.

    pip install -r requirements.txt
    

A helyi kapcsolati sztring konfigurálása

A helyi fejlesztéshez és az Azure SQL Database-hez való csatlakozáshoz adja hozzá a következő AZURE_SQL_CONNECTIONSTRING környezeti változót. Cserélje le a <database-server-name> helyőrzőket <database-name> a saját értékeire. Példa környezeti változók jelennek meg a Bash-rendszerhéjhoz.

Az interaktív hitelesítés jelszó nélküli lehetőséget biztosít helyi futtatáskor.

A Windowsban a Microsoft Entra Interaktív hitelesítés a Microsoft Entra többtényezős hitelesítési technológiával állíthatja be a kapcsolatot. Ebben a módban a bejelentkezési azonosító megadásával aktiválódik egy Azure-hitelesítési párbeszédpanel, amely lehetővé teszi, hogy a felhasználó beírja a jelszót a kapcsolat befejezéséhez.

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'

További információ: A Microsoft Entra ID használata az ODBC-illesztővel. Ha ezt a lehetőséget használja, keresse meg azt az ablakot, amely a hitelesítő adatok megadását kéri.

A kapcsolati sztring az Azure Portalon hozhatja létre:

  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 a Csatlakozás ion-sztringek lapra kapcsolati sztring információk lekéréséhez. Keresse meg az ODBC fület.

Megjegyzés:

Ha telepítette az Azure Arcot , és hozzárendelte az Azure-előfizetéséhez, az App Service-ben üzembe helyezett alkalmazáshoz megjelenített felügyelt identitáskezelési módszert is használhatja.

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:

  • Lekéri az Azure SQL Database kapcsolati sztring 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.
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

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 fájlt a app.py Visual Studio Code-ban.

    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.

    A try /redoc használatával az API-hoz létrehozott dokumentáció egy másik formáját is megtekintheti.

  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ás lehetőséget, és a rendszer visszaadja az imént létrehozott személyt.

Ü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 a Azure-alkalmazás szolgáltatásban futó gunicorn futhasson. A start.sh egy sorból áll:

    gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:app
    
  2. Az az webapp használatával üzembe helyezheti a kódot az App Service-ben. (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álhatja 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 a bemutatóhoz. 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 a pyodbc használatával, 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 Csatlakozás az Azure SQL Database-be

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 konfigurálja az App Service-t egy kapcsolati sztring 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), az Azure Data Studiót és a Visual Studio Code-ot az SQL Server mssql-bővítményével. Az Azure Portalt is használhatja a rövid útmutatóban leírtak szerint: 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ót a tartalmazottadatbázis-felhasználókkal kapcsolatos, az adatbázis hordozhatóvá tételével foglalkozó cikkben talál. 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 által hozzárendelt felügyelt identitást, akkor dobja el a felhasználót, és hozza létre újra. Futtassa DROP USER [<web-app-name>] és futtassa újra a CREATE parancsokat ALTER . 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 sztring.

    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 sztring a következőhöz hasonlónak kell lennie:

    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
    

    Töltse ki és <dabaser-server-name> <database-name> adja meg az értékeket.

    A jelszó nélküli kapcsolati sztring nem tartalmaz felhasználónevet vagy jelszót. Ehelyett, amikor az alkalmazás az Azure-ban fut, a kód DefaultAzureCredential az Azure Identity-kódtárból lekér egy jogkivonatot, amellyel használható pyodbc.

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

Az URL-címhez fűzve megtekintheti a Swagger felhasználói felületét, és tesztelheti az API-metódusokat.

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