Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:Azure SQL Database
W tym przewodniku Szybki start opisano sposób łączenia aplikacji z bazą danych w usłudze Azure SQL Database i wykonywania zapytań przy użyciu języka Python i sterownika mssql-python. Sterownik mssql-python ma wbudowaną obsługę uwierzytelniania Entra firmy Microsoft, dzięki czemu połączenia bez hasła są proste. Więcej informacji na temat połączeń bez hasła można uzyskać w centrum bez hasła.
Wymagania wstępne
- Subskrypcja platformy Azure.
- Baza danych Azure SQL Database skonfigurowana z uwierzytelnianiem Microsoft Entra. Możesz go utworzyć przy użyciu przewodnika Szybki start: tworzenie pojedynczej bazy danych — Azure SQL Database. Alternatywnie możesz użyć bazy danych SQL w usłudze Microsoft Fabric.
- Program Visual Studio Code z rozszerzeniem języka Python.
- Środowisko Python w wersji 3.10 lub nowszej.
- Interfejs Azure CLI do uwierzytelniania bez hasła (działa w systemach Windows, macOS i Linux).
Konfigurowanie bazy danych
Bezpieczne, bez hasła połączenia z usługą Azure SQL Database wymagają pewnych konfiguracji bazy danych. Sprawdź następujące ustawienia na serwerze logicznym na platformie Azure , aby prawidłowo nawiązać połączenie z usługą Azure SQL Database w środowiskach lokalnych i hostowanych:
W przypadku lokalnych połączeń programistycznych upewnij się, że serwer logiczny jest skonfigurowany tak, aby zezwolić na nawiązywanie połączenia z adresem IP komputera lokalnego i innymi usługami platformy Azure:
Przejdź do strony Sieć serwera.
Przełącz przycisk radiowy Wybrane sieci, aby wyświetlić dodatkowe opcje konfiguracji.
Wybierz pozycję Dodaj adres IPv4 klienta (xx.xx.xx.xx.xx ), aby dodać regułę zapory, która umożliwi połączenia z adresu IPv4 komputera lokalnego. Alternatywnie możesz również wybrać pozycję + Dodaj regułę zapory, aby wprowadzić wybrany konkretny adres IP.
Upewnij się, że pole wyboru Zezwalaj usługom i zasobom platformy Azure na dostęp do tego serwera jest zaznaczone.
Ostrzeżenie
Włączenie opcji Zezwalaj usługom i zasobom platformy Azure na dostęp do tego ustawienia serwera nie jest zalecaną praktyką zabezpieczeń w scenariuszach produkcyjnych. Rzeczywiste aplikacje powinny implementować bezpieczniejsze podejścia, takie jak silniejsze ograniczenia zapory lub konfiguracje sieci wirtualnej.
Więcej informacji na temat konfiguracji zabezpieczeń bazy danych można uzyskać w następujących zasobach:
- Konfigurowanie reguł zapory usługi Azure SQL Database.
- Konfigurowanie sieci wirtualnej z prywatnymi punktami końcowymi.
Serwer musi również mieć włączone uwierzytelnianie Microsoft Entra i mieć przypisane konto administratora firmy Microsoft Entra. W przypadku lokalnych połączeń programistycznych konto administratora Microsoft Entra powinno być kontem, na które można się zalogować do programu Visual Studio lub lokalnie do interfejsu wiersza polecenia platformy Azure. Możesz sprawdzić, czy serwer ma włączone uwierzytelnianie Microsoft Entra na stronie Microsoft Entra ID swojego serwera logicznego.
Jeśli używasz osobistego konta platformy Azure, upewnij się, że masz skonfigurowaną usługę Microsoft Entra dla usługi Azure SQL Database, aby przypisać swoje konto jako administratora serwera. Jeśli używasz konta firmowego, Microsoft Entra ID najprawdopodobniej jest już skonfigurowany.
Tworzenie projektu
Utwórz nowy projekt w języku Python przy użyciu programu Visual Studio Code.
Otwórz program Visual Studio Code, utwórz nowy folder dla projektu i przejdź do tego katalogu.
mkdir python-sql-azure cd python-sql-azureUtwórz środowisko wirtualne dla aplikacji.
py -m venv .venv .venv\scripts\activateUtwórz nowy plik w języku Python o nazwie
app.py.
Instalowanie sterownika mssql-python
Aby nawiązać połączenie z usługą Azure SQL Database przy użyciu języka Python, zainstaluj mssql-python sterownik. Ten sterownik ma wbudowaną obsługę uwierzytelniania firmy Microsoft Entra, eliminując konieczność ręcznej obsługi tokenów. W tym przewodniku szybkiego startu zainstalujesz również pakiety fastapi, uvicorn i pydantic w celu utworzenia i uruchomienia interfejsu API.
Uwaga / Notatka
W systemach macOS i Linux przed zainstalowaniem mssql-pythonprogramu wymagane są zależności systemowe. Aby uzyskać instrukcje specyficzne dla platformy, zobacz Instalowanie pakietu mssql-python .
Utwórz plik requirements.txt z następującymi wierszami:
mssql-python fastapi uvicorn[standard] pydantic python-dotenvZainstaluj wymagania.
pip install -r requirements.txt
Skonfiguruj ciąg połączenia lokalnego
W przypadku lokalnego tworzenia oprogramowania utwórz plik .env w folderze projektu, aby przechowywać ciąg połączenia. Dzięki temu poświadczenia są poza kodem i kontrolą źródła.
W folderze projektu utwórz nowy plik o nazwie
.env.Dodaj zmienną
AZURE_SQL_CONNECTIONSTRINGz parametrami połączenia. Zastąp symbole zastępcze<database-server-name>i<database-name>własnymi wartościami.
Sterownik mssql-python ma wbudowaną obsługę uwierzytelniania Entra firmy Microsoft. Użyj parametru , Authentication aby określić metodę uwierzytelniania.
- ActiveDirectoryDefault (zalecane)
- Uwierzytelnianie interakcyjne
- Uwierzytelnianie SQL
- Fabric SQL Database
ActiveDirectoryDefault automatycznie odnajduje poświadczenia z wielu źródeł bez konieczności logowania interakcyjnego. Jest to zalecana opcja programowania lokalnego.
Aby uzyskać najbardziej niezawodne środowisko programowania lokalnego, najpierw zaloguj się przy użyciu interfejsu wiersza polecenia platformy Azure:
az login
Następnie użyj tego formatu parametrów połączenia w .env pliku:
AZURE_SQL_CONNECTIONSTRING=Server=<database-server-name>.database.windows.net;Database=<database-name>;Authentication=ActiveDirectoryDefault;Encrypt=yes;TrustServerCertificate=no;
ActiveDirectoryDefault ocenia poświadczenia w następującej kolejności:
- Zmienne środowiskowe (dla poświadczeń jednostki usługi)
- Tożsamość zarządzana (w przypadku uruchamiania na platformie Azure)
-
Interfejs wiersza polecenia platformy Azure (z
az login) - Visual Studio (tylko system Windows)
-
Azure PowerShell (z
Connect-AzAccount)
Wskazówka
W przypadku aplikacji produkcyjnych użyj określonej metody uwierzytelniania dla danego scenariusza, aby uniknąć opóźnienia odnajdywania poświadczeń:
-
Azure App Service/Functions: użyj
ActiveDirectoryMSI(tożsamość zarządzana) -
Logowanie użytkownika interakcyjnego: użyj polecenia
ActiveDirectoryInteractive -
Usługa główna: użyj
ActiveDirectoryServicePrincipal
Szczegółowe informacje dotyczące tworzenia parametry połączenia można uzyskać w witrynie Azure Portal:
Przejdź do programu Azure SQL Server, wybierz stronę Bazy danych SQL, aby znaleźć nazwę bazy danych, a następnie wybierz bazę danych.
W bazie danych przejdź do strony Przegląd , aby uzyskać nazwę serwera.
Dodawanie kodu w celu nawiązania połączenia z usługą Azure SQL Database
W folderze projektu utwórz plik app.py i dodaj przykładowy kod. Ten kod tworzy interfejs API, który:
- Ładuje konfigurację z pliku
.envprzy użyciupython-dotenv. - Pobiera parametry połączenia usługi Azure SQL Database ze zmiennej środowiskowej.
- Tworzy tabelę
Personsw bazie danych podczas uruchamiania (tylko w przypadku scenariuszy testowania). - Definiuje funkcję do pobierania wszystkich
Personrekordów z bazy danych. - Definiuje funkcję do pobierania jednego
Personrekordu z bazy danych. - Definiuje funkcję dodawania nowych
Personrekordów do bazy danych.
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
Ostrzeżenie
Przykładowy kod przedstawia nieprzetworzone instrukcje SQL, które nie powinny być używane w kodzie produkcyjnym. Zamiast tego użyj pakietu Obiektowy Maper Relacyjny (ORM), takiego jak SqlAlchemy, który generuje bardziej bezpieczną warstwę w celu uzyskania dostępu do Twojej bazy danych.
Uruchamianie i testowanie aplikacji lokalnie
Aplikacja jest gotowa do testowania lokalnie.
app.pyUruchom plik w programie Visual Studio Code.uvicorn app:app --reloadNa stronie Swagger UI dla aplikacji
http://127.0.0.1:8000/docsrozwiń metodę POST i wybierz pozycję Wypróbuj to.Możesz również spróbować
/redocwyświetlić inną formę wygenerowanej dokumentacji interfejsu API.Zmodyfikuj przykładowy kod JSON, aby uwzględnić wartości dla pierwszego i nazwiska. Wybierz pozycję Wykonaj , aby dodać nowy rekord do bazy danych. Interfejs API zwraca pomyślną odpowiedź.
Rozwiń metodę
GETna stronie Swagger UI i wybierz pozycję Wypróbuj. Wybierz Wykonaj, a osoba, którą właśnie utworzyłeś, zostanie zwrócona.
Wdrażanie w usłudze Azure App Service
Aplikacja jest gotowa do wdrożenia na platformie Azure.
Utwórz plik start.sh, aby gunicorn w usłudze Azure App Service mógł uruchomić uvicorn. Start.sh ma jeden wiersz:
gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:appUżyj polecenia az webapp up, aby wdrożyć kod na usłudze App Service. (Możesz użyć opcji
-dryrun, aby zobaczyć, co robi polecenie bez tworzenia zasobu).az webapp up \ --resource-group <resource-group-name> \ --name <web-app-name>Użyj polecenia az webapp config set, aby skonfigurować usługę App Service do korzystania z pliku start.sh.
az webapp config set \ --resource-group <resource-group-name> \ --name <web-app-name> \ --startup-file start.shUżyj polecenia az webapp identity assign, aby włączyć tożsamość zarządzaną przypisaną przez system dla usługi App Service.
az webapp identity assign \ --resource-group <resource-group-name> \ --name <web-app-name>W tym przewodniku szybkiego startu do celów demonstracyjnych używana jest tożsamość zarządzana przypisana przez system. Tożsamość zarządzana przypisana przez użytkownika jest wydajniejsza w szerszym zakresie scenariuszy. Aby uzyskać więcej informacji, zobacz Zalecenia dotyczące najlepszych rozwiązań dotyczących tożsamości zarządzanych. Przykład użycia tożsamości zarządzanej przypisanej przez użytkownika w języku mssql-python można znaleźć w temacie Migrate a Python application to use passwordless connections with Azure SQL Database (Migrowanie aplikacji języka Python w celu używania połączeń bez hasła z usługą Azure SQL Database).
Łączenie usługi App Service z usługą Azure SQL Database
W sekcji Konfigurowanie bazy danych skonfigurowano sieć i uwierzytelnianie firmy Microsoft dla serwera bazy danych Azure SQL Database. W tej sekcji ukończysz konfigurację bazy danych i skonfigurujesz usługę App Service przy użyciu parametry połączenia w celu uzyskania dostępu do serwera bazy danych.
Aby uruchomić te polecenia, możesz użyć dowolnego narzędzia lub środowiska IDE, które może łączyć się z usługą Azure SQL Database, w tym z programem SQL Server Management Studio (SSMS) i programem Visual Studio Code z rozszerzeniem MSSQL. Możesz również użyć witryny Azure Portal zgodnie z opisem w przewodniku Szybki start: używanie edytora zapytań witryny Azure Portal do wykonywania zapytań w usłudze Azure SQL Database.
Dodaj użytkownika do usługi Azure SQL Database za pomocą poleceń SQL, aby utworzyć użytkownika i rolę na potrzeby dostępu bez hasła.
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>]Aby uzyskać więcej informacji, zobacz artykuł Contained Database Users - Making Your Database Portable (Użytkownicy zawartej bazy danych — tworzenie przenośnej bazy danych). Przykład pokazujący tę samą zasadę, ale zastosowaną do maszyny wirtualnej platformy Azure, zobacz Samouczek: używanie przypisanej przez system tożsamości zarządzanej maszyny wirtualnej z systemem Windows w celu uzyskania dostępu do usługi Azure SQL. Aby uzyskać więcej informacji na temat przypisanych ról, zobacz Role stałej bazy danych.
Jeśli wyłączysz i włączysz tożsamość zarządzaną przypisaną przez system usługi App Service, usuń użytkownika i utwórz go ponownie. Uruchom
DROP USER [<web-app-name>], a następnie ponownie uruchom poleceniaCREATEiALTER. Aby wyświetlić użytkowników, użyj poleceniaSELECT * FROM sys.database_principals.Użyj polecenia az webapp config appsettings set, aby dodać ustawienie aplikacji dla łańcucha połączenia.
az webapp config appsettings set \ --resource-group <resource-group-name> \ --name <web-app-name> \ --settings AZURE_SQL_CONNECTIONSTRING="<connection-string>"W przypadku wdrożonej aplikacji parametry połączenia powinny wyglądać następująco:
Server=<database-server-name>.database.windows.net;Database=<database-name>;Authentication=ActiveDirectoryMSI;Encrypt=yes;TrustServerCertificate=no;Wypełnij wartości
<database-server-name>i<database-name>.Parametry połączenia bez hasła nie zawierają nazwy użytkownika ani hasła. Zamiast tego, gdy aplikacja działa na platformie Azure, sterownik mssql-python używa
ActiveDirectoryMSItrybu uwierzytelniania do automatycznego uwierzytelniania przy użyciu tożsamości zarządzanej usługi App Service.
Testowanie wdrożonej aplikacji
Przejdź do adresu URL aplikacji, aby sprawdzić, czy połączenie z usługą Azure SQL Database działa. Adres URL aplikacji można znaleźć na stronie przeglądu usługi App Service.
https://<web-app-name>.azurewebsites.net
Dołącz /docs do adresu URL, aby wyświetlić Swagger UI i przetestować metody interfejsu API.
Gratulacje! Aplikacja jest teraz połączona z usługą Azure SQL Database zarówno w środowiskach lokalnych, jak i hostowanych.