Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
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 SQL Języka Python — pyodbc. Ten przewodnik szybkiego startu jest zgodny z zalecanym podejściem bezhasłowym w celu nawiązania połączenia z bazą danych. 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.
- Najnowsza wersja Azure CLI.
- Program Visual Studio Code z rozszerzeniem języka Python.
- Środowisko Python w wersji 3.8 lub nowszej. Jeśli używasz maszyny klienckiej z systemem Linux, zobacz Instalowanie sterownika ODBC.
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 i utwórz nowy folder dla projektu i zmień w nim katalog.
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 pyodbc
Aby nawiązać połączenie z usługą Azure SQL Database przy użyciu języka Python, zainstaluj pyodbc sterownik. Ten pakiet działa jako dostawca danych do nawiązywania połączenia z bazami danych, wykonywania poleceń i pobierania wyników. W tym przewodniku szybkiego startu zainstalujesz również pakiety flask, uvicorn i pydantic w celu utworzenia i uruchomienia interfejsu API.
Aby uzyskać szczegółowe informacje i szczegółowe instrukcje dotyczące instalowania pyodbc sterownika we wszystkich systemach operacyjnych, zobacz Konfigurowanie środowiska deweloperskiego na potrzeby programowania w języku Python pyodbc.
Utwórz plik requirements.txt z następującymi wierszami:
pyodbc fastapi uvicorn[standard] pydantic azure-identityZainstaluj wymagania.
pip install -r requirements.txt
Skonfiguruj ciąg połączenia lokalnego
W przypadku programowania lokalnego i nawiązywania połączenia z usługą Azure SQL Database dodaj następującą AZURE_SQL_CONNECTIONSTRING zmienną środowiskową. Zastąp symbole zastępcze <database-server-name> i <database-name> własnymi wartościami. Przykładowe zmienne środowiskowe dla powłoki Bash są pokazane.
Uwierzytelnianie interakcyjne zapewnia opcję bez hasła w przypadku uruchamiania lokalnego. Ta opcja jest zalecana, ponieważ nie trzeba przechowywać wpisów tajnych uwierzytelniania ani zarządzać nimi w systemie lokalnym.
W systemie Windows rozwiązanie Microsoft Entra Interactive Authentication może używać technologii uwierzytelniania wieloskładnikowego firmy Microsoft do konfigurowania połączenia. W tym trybie, podając identyfikator logowania, zostanie wyzwolone okno dialogowe uwierzytelniania platformy Azure i umożliwi użytkownikowi wprowadzenie hasła w celu ukończenia połączenia.
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'
Aby uzyskać więcej informacji, zobacz Using Microsoft Entra ID with the ODBC Driver (Używanie identyfikatora Entra firmy Microsoft ze sterownikiem ODBC). Jeśli używasz tej opcji, poszukaj okna z monitem o podanie poświadczeń.
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 Parametry połączenia, aby uzyskać informacje o parametrach połączenia. Spójrz pod zakładkę ODBC.
Uwaga
Jeśli zainstalowałeś Azure Arc i powiązałeś ją z subskrypcją platformy Azure, możesz również użyć podejścia opartego na tożsamości zarządzanej, pokazanej dla aplikacji wdrożonej w usłudze App Service.
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:
- 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.
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
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ż użyć próby
/redocwyświetlenia innej formy 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 interfejsu użytkownika struktury Swagger 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 tożsamość zarządzana przypisana przez system jest używana do demonstracji. 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. Aby zapoznać się z przykładem użycia tożsamości zarządzanej przypisanej przez użytkownika za pomocą narzędzia pyodbc, zobacz Migrowanie aplikacji języka Python do 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:
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=30Wypeł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, kod używa z
DefaultAzureCredentialbiblioteki tożsamości platformy Azure, aby uzyskać token do użycia z usługąpyodbc.
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ć interfejs użytkownika struktury Swagger 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.