Připojení a dotazování služby Azure SQL Database pomocí Pythonu a ovladače pyodbc
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 SQL Pythonu – pyodbc. Tento rychlý start se řídí doporučeným přístupem bez hesla pro připojení k databázi. Další informace o připojeních bez hesel najdete v centru bez hesel.
Požadavky
- Předplatné Azure
- Databáze Azure SQL nakonfigurovaná s ověřováním Microsoft Entra. Můžete ji vytvořit pomocí rychlého startu Pro vytvoření databáze.
- Nejnovější verze Azure CLI.
- Visual Studio Code s rozšířením Pythonu
- Python 3.8 nebo novější Pokud používáte klientský počítač s Linuxem, přečtěte si téma Instalace ovladače ODBC.
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í:
V případě místních vývojových připojení se ujistěte, že je váš logický server nakonfigurovaný tak, aby umožňoval připojení IP adresy místního počítače a dalších služeb Azure:
Přejděte na stránku Sítě vašeho serveru.
Přepněte přepínač Vybrané sítě, aby se zobrazily další možnosti konfigurace.
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.
Ujistěte se, že je zaškrtnuté políčko Povolit službám a prostředkům Azure přístup k tomuto serveru .
Upozorňující
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í:
- Konfigurace pravidel brány firewall služby Azure SQL Database
- Nakonfigurujte virtuální síť s privátními koncovými body.
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.
Pokud používáte osobní účet Azure, ujistěte se, že máte nastavené a nakonfigurované Microsoft Entra pro Azure SQL Database , abyste mohli účet přiřadit jako správce serveru. Pokud používáte podnikový účet, Bude pro vás pravděpodobně již nakonfigurované ID Microsoft Entra.
Vytvoření projektu
Vytvořte nový projekt Pythonu pomocí editoru Visual Studio Code.
Otevřete Visual Studio Code a vytvořte novou složku pro projekt a změňte adresář na něj.
mkdir python-sql-azure cd python-sql-azure
Vytvořte pro aplikaci virtuální prostředí.
py -m venv .venv .venv\scripts\activate
Vytvořte nový soubor Pythonu s názvem
app.py
.
Instalace ovladače pyodbc
Pokud se chcete připojit ke službě Azure SQL Database pomocí Pythonu pyodbc
, nainstalujte ovladač. Tento balíček funguje jako zprostředkovatel dat pro připojení k databázím, spouštění příkazů a načítání výsledků. V tomto rychlém startu také nainstalujete flask
, uvicorn
a pydantic
balíčky pro vytvoření a spuštění rozhraní API.
Podrobnosti a konkrétní pokyny pro instalaci pyodbc
ovladače do všech operačních systémů najdete v tématu Konfigurace vývojového prostředí pro vývoj pyodbc Pythonu.
Vytvořte soubor requirements.txt s následujícími řádky:
pyodbc fastapi uvicorn[standard] pydantic azure-identity
Nainstalujte požadavky.
pip install -r requirements.txt
Konfigurace místního připojovací řetězec
Pro místní vývoj a připojení ke službě Azure SQL Database přidejte následující AZURE_SQL_CONNECTIONSTRING
proměnnou prostředí. <database-server-name>
Nahraďte zástupné <database-name>
symboly vlastními hodnotami. Ukázkové proměnné prostředí se zobrazují pro prostředí Bash.
Interaktivní ověřování poskytuje možnost bez hesla, když používáte místně. Tato možnost se doporučuje, protože v místním systému nemusíte ukládat ani spravovat tajné kódy ověřování.
Ve Windows může Microsoft Entra Interactive Authentication použít vícefaktorové ověřovací technologie Microsoft Entra k nastavení připojení. V tomto režimu se aktivuje dialogové okno ověřování Azure zadáním přihlašovacího ID a umožní uživateli zadat heslo k dokončení připojení.
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'
Další informace naleznete v tématu Použití Rozhraní Microsoft Entra ID s ovladačem ODBC. Pokud použijete tuto možnost, vyhledejte okno s výzvou k zadání přihlašovacích údajů.
Podrobnosti o vytvoření připojovací řetězec můžete získat z webu Azure Portal:
Přejděte na Azure SQL Server, vyberte stránku databáze SQL a vyhledejte název databáze a vyberte databázi.
V databázi přejděte na stránku Připojovací řetězce a získejte připojovací řetězec informace. Prohlédněte si kartu ODBC .
Poznámka:
Pokud jste nainstalovali Azure Arc a přidružili ho k předplatnému Azure, můžete také použít přístup spravované identity zobrazený pro aplikaci nasazenou do služby App Service.
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 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.
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
Upozorňující
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í.
Spusťte soubor v editoru
app.py
Visual Studio Code.uvicorn app:app --reload
Na stránce Swagger UI aplikace http://127.0.0.1:8000/docsrozbalte metodu POST a vyberte Vyzkoušet.
Pomocí příkazu try /redoc můžete také zobrazit jinou formu vygenerované dokumentace pro rozhraní API.
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. Rozhraní API vrátí úspěšnou odpověď.
Rozbalte metodu GET na stránce uživatelského rozhraní Swagger 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.
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
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>
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
Pomocí příkazu az webapp identity assign povolte spravovanou identitu přiřazenou systémem pro službu App Service.
az webapp identity assign \ --resource-group <resource-group-name> \ --name <web-app-name>
V tomto rychlém startu se pro demonstraci používá spravovaná identita přiřazená systémem. 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 pyodbcem najdete v tématu Migrace aplikace v Pythonu 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ě sql Server Management Studia (SSMS), Azure Data Studia a editoru Visual Studio Code s rozšířením MSsql SQL Serveru. 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.
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 a spusťte
DROP USER [<web-app-name>]
příkazy znovuCREATE
ALTER
. Pokud chcete zobrazit uživatele, použijteSELECT * FROM sys.database_principals
.Pomocí příkazu az webapp config appsettings set přidejte nastavení aplikace pro připojovací řetězec.
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:
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
<dabaser-server-name>
Vyplňte hodnoty a<database-name>
zadejte je.Připojovací řetězec bez hesla neobsahuje uživatelské jméno ani heslo. Místo toho, když aplikace běží v Azure, kód používá
DefaultAzureCredential
z knihovny identit Azure k získání tokenu pro použití spyodbc
.
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řipojte /docs k adrese URL, abyste viděli uživatelské 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í.
Související obsah
- Migrace aplikace v Pythonu pro použití bez hesel s Azure SQL Database – Zobrazuje spravovanou identitu přiřazenou uživatelem.
- Připojení bez hesla pro služby Azure
- Doporučené osvědčené postupy pro spravované identity