Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 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. További információt találhatsz a jelszó nélküli kapcsolatokról a jelszó nélküli platformon.
Előfeltételek
- Egy Azure-előfizetés.
- Egy Microsoft Entra-hitelesítéssel konfigurált Azure SQL-adatbázis. Létrehozhat egyet a gyorsútmutatóval: Egyetlen adatbázis létrehozása – Azure SQL Database.
- Az Azure CLI legújabb verziója.
- Visual Studio Code a Python-bővítménnyel.
- Python 3.8 vagy újabb verzió. Ha Linux-ügyfélgépet használ, olvassa el az ODBC-illesztőprogram telepítése című témakört.
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:
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 Kijelölt hálózatok rádiógomb bekapcsolásával további konfigurációs beállításokat jelenít meg.
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.
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.
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:
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.
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.
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-azureHozzon létre egy virtuális környezetet az alkalmazáshoz.
py -m venv .venv .venv\scripts\activateHozzon 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 flask futtatásához telepíthet uvicornés pydanticfuttathat 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 pyodbcPyodbc Python-fejlesztés fejlesztési környezetének konfigurálását ismertető cikket.
Hozzon létre egy requirements.txt fájlt a következő sorokkal:
pyodbc fastapi uvicorn[standard] pydantic azure-identityTelepí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> és <database-name> helyőrzőket 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. Ez a beállítás azért ajánlott, mert nem kell a hitelesítési titkos kulcsokat a helyi rendszerben tárolnia vagy kezelnie.
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 létrehozásához szükséges részleteket az Azure Portalról szerezheti be:
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.
Az adatbázisban lépjen a Kapcsolati sztringek lapra a kapcsolati sztring adatainak 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 sztringet egy környezeti változóból.
- Létrehoz egy táblát
Personsaz 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
Personrekordot az adatbázisból. - Egy függvényt határoz meg, amely egy
Personrekordot kér le az adatbázisból. - Definiál egy függvényt, amely új
Personrekordokat 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.
Futtassa a fájlt a
app.pyVisual Studio Code-ban.uvicorn app:app --reloadAz 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
/redocmegtekintheti.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.
Bontsa ki a
GETmetó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.
Hozzon létre egy start.sh fájlt, hogy az Azure App Service-ben futó gunicorn futhasson. A start.sh egy sorból áll:
gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:appAz az webapp használatával üzembe helyezheti a kódot az App Service-ben. (A beállítással
-dryrunmegtekintheti, 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>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.shAz 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 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.
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 á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 aCREATEparancsokatALTER. A felhasználók megtekintéséhez használja a következőtSELECT * FROM sys.database_principals: .Az az webapp config appsettings set paranccsal adjon hozzá egy alkalmazásbeállítást a kapcsolati sztringhez.
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:
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=30Töltse ki és
<database-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
DefaultAzureCredentialaz 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
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.