Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :Azure SQL Database
Ce guide de démarrage rapide explique comment connecter une application à une base de données dans Azure SQL Database et effectuer des requêtes à l’aide de Python et du pilote mssql-python. Le pilote mssql-python prend en charge l’authentification Microsoft Entra intégrée, ce qui simplifie les connexions sans mot de passe. Vous pouvez en apprendre plus sur les connexions sans mot de passe sur le Hub des connexions sans mot de passe.
Prérequis
- Un abonnement Azure.
- Une base de données Azure SQL configurée avec l’authentification Microsoft Entra. Vous pouvez en créer un à l’aide du guide de démarrage rapide : Créer une base de données unique - Azure SQL Database. Vous pouvez également utiliser une base de données SQL dans Microsoft Fabric.
- Visual Studio Code avec l’extension Python.
- Python 3.10 ou version ultérieure.
- Azure CLI pour l’authentification sans mot de passe (fonctionne sur Windows, macOS et Linux).
Configurer la base de données
Les connexions sécurisées et sans mot de passe à Azure SQL Database nécessitent certaines configurations de base de données. Vérifiez les paramètres suivants sur votre serveur logique dans Azure pour vous connecter correctement à Azure SQL Database dans les environnements locaux et hébergés :
Pour les connexions de développement local, vérifiez que votre serveur logique est configuré pour autoriser l’adresse IP de votre ordinateur local et d’autres services Azure à se connecter :
Accédez à la page Réseau de votre serveur.
Basculez le bouton radio Réseaux sélectionnés pour afficher des options de configuration supplémentaires.
Sélectionnez Ajouter l’adresse IPv4 de votre client (xx.xx.xx.xx.xx.xx) pour ajouter une règle de pare-feu qui activera les connexions à partir de l’adresse IPv4 de votre ordinateur local. Vous pouvez également sélectionner + Ajouter une règle de pare-feu pour entrer une adresse IP spécifique de votre choix.
Vérifiez que la case Autoriser les services et les ressources Azure à accéder à ce serveur est cochée.
Avertissement
L’activation du paramètre Autoriser les services et les ressources Azure à accéder à ce serveur n’est pas une pratique de sécurité recommandée pour les scénarios de production. Les applications réelles doivent implémenter des approches plus sécurisées, telles que des restrictions de pare-feu ou des configurations de réseau virtuel plus strictes.
Vous pouvez en apprendre davantage sur les configurations de sécurité de base de données avec les ressources suivantes :
Le serveur doit également activer l’authentification Microsoft Entra et disposer d’un compte d’administrateur Microsoft Entra affecté. Pour les connexions de développement local, le compte d’administrateur de Microsoft Entra doit être un compte que vous pouvez également connecter localement à Visual Studio ou à Azure CLI. Vous pouvez vérifier si l’authentification Microsoft Entra est activée sur la page Microsoft Entra ID de votre serveur logique.
Si vous utilisez un compte Azure personnel, assurez-vous d’avoir Microsoft Entra installé et configuré dans la base de données Azure SQL afin d’assigner votre compte en tant qu’administrateur de serveur. En revanche, si vous utilisez un compte d’entreprise, il est fort probable que Microsoft Entra ID soit déjà configuré pour vous.
Créer le projet
Créez un nouveau projet Python avec Visual Studio Code.
Ouvrez Visual Studio Code, créez un dossier pour votre projet et passez à ce répertoire.
mkdir python-sql-azure cd python-sql-azureCréez un environnement virtuel pour l’application.
py -m venv .venv .venv\scripts\activateCréer un fichier Python appelé
app.py.
Installer le pilote mssql-python
Pour vous connecter à Azure SQL Database à l’aide de Python, installez le pilote mssql-python. Ce pilote prend en charge l’authentification Microsoft Entra, ce qui élimine la nécessité de gérer manuellement les jetons. Dans ce démarrage rapide, vous installez également les packages fastapi, uvicorn et pydantic pour créer et exécuter une API.
Note
Sur macOS et Linux, les dépendances système sont requises avant l’installation mssql-python. Consultez Installer le package mssql-python pour obtenir des instructions spécifiques à la plateforme.
Créez un fichier requirements.txt avec les lignes suivantes :
mssql-python fastapi uvicorn[standard] pydantic python-dotenvInstallez les exigences.
pip install -r requirements.txt
Configurer la chaîne de connexion locale
Pour le développement local, créez un .env fichier dans votre dossier de projet pour stocker votre chaîne de connexion. Cela permet que les informations d'identification ne soient pas présentes dans votre code et votre contrôle de code source.
Dans le dossier du projet, créez un fichier nommé
.env.Ajoutez la
AZURE_SQL_CONNECTIONSTRINGvariable avec votre chaîne de connexion. Remplacez les espaces réservés<database-server-name>et<database-name>par vos valeurs.
Le pilote mssql-python prend en charge l’authentification intégrée de Microsoft Entra. Utilisez le Authentication paramètre pour spécifier la méthode d’authentification.
- ActiveDirectoryDefault (recommandé)
- Authentification interactive
- Authentification SQL
- Base de données SQL Fabric
ActiveDirectoryDefault détecte automatiquement les informations d’identification de plusieurs sources sans nécessiter de connexion interactive. Il s’agit de l’option recommandée pour le développement local.
Pour obtenir l’expérience de développement local la plus fiable, connectez-vous avec Azure CLI en premier :
az login
Utilisez ensuite ce format de chaîne de connexion dans votre .env fichier :
AZURE_SQL_CONNECTIONSTRING=Server=<database-server-name>.database.windows.net;Database=<database-name>;Authentication=ActiveDirectoryDefault;Encrypt=yes;TrustServerCertificate=no;
ActiveDirectoryDefault évalue les informations d’identification dans l’ordre suivant :
- Variables d’environnement (pour les informations d’identification du principal de service)
- Identité managée (lors de l’exécution sur Azure)
-
Azure CLI (à partir de
az login) - Visual Studio (Windows uniquement)
-
Azure PowerShell (à partir de
Connect-AzAccount)
Conseil / Astuce
Pour les applications de production, utilisez la méthode d’authentification spécifique pour votre scénario pour éviter la latence de découverte des informations d’identification :
-
Azure App Service/Functions : Utiliser
ActiveDirectoryMSI(identité managée) -
Connexion utilisateur interactive : Utiliser
ActiveDirectoryInteractive -
Principal de service : Utiliser
ActiveDirectoryServicePrincipal
Vous pouvez obtenir les détails de la création de votre chaîne de connexion à partir du Portail Azure :
Accédez à Azure SQL Server, sélectionnez la page Bases de données SQL pour trouver le nom de votre base de données, puis sélectionnez la base de données.
Dans la base de données, accédez à la page Vue d’ensemble pour obtenir le nom du serveur.
Ajouter du code pour se connecter à Azure SQL Database
Dans le dossier du projet, créez un fichier app.py et ajoutez l’exemple de code. Ce code crée une API qui :
- Charge la configuration à partir d’un fichier
.envà l’aide depython-dotenv. - récupère une chaîne de connexion de base Azure SQL Database à partir d’une variable d’environnement
- crée une table
Personsdans la base de données au démarrage (pour les scénarios de test uniquement) - définit une fonction pour récupérer tous les enregistrements
Personde la base de données. - définit une fonction pour récupérer un enregistrement
Personde la base de données - Définit une fonction pour ajouter de nouveaux enregistrements
Personà la base de données.
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
Avertissement
L’exemple de code montre des instructions SQL brutes, qui ne doivent pas être utilisées dans le code de production. Utilisez plutôt un package ORM (Object Relational Mapper) comme SqlAlchemy qui génère une couche d’objets plus sécurisée pour accéder à votre base de données.
Exécuter et tester l’application localement
L’application est prête à être testée localement.
Ouvrez le fichier
app.pydans Visual Studio Code.uvicorn app:app --reloadDans la page de l’interface utilisateur Swagger pour l’application
http://127.0.0.1:8000/docs, développez la méthode POST, puis sélectionnez Essayer.Vous pouvez également essayer
/redocpour voir une autre présentation de la documentation générée de l’API.Modifiez l’exemple JSON pour inclure des valeurs pour le prénom et le nom. Sélectionnez Exécuter pour ajouter un nouvel enregistrement à la base de données. L’API retourne une réponse réussie.
Développez la
GETméthode sur la page de l’interface utilisateur Swagger, puis sélectionnez Essayer. Choisissez Exécuter, et la personne que vous venez de créer est retournée.
Déployer dans Azure App Service
L’application est prête à être déployée sur Azure.
Créez un fichier start.sh afin que gunicorn dans Azure App Service puisse exécuter uvicorn. Le fichier start.sh a une ligne :
gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:appUtilisez az webapp up pour déployer le code sur App Service. (Vous pouvez utiliser l’option
-dryrunpour voir ce que fait la commande sans créer la ressource.)az webapp up \ --resource-group <resource-group-name> \ --name <web-app-name>Utilisez la commande az webapp config set pour configurer App Service et utiliser le fichier start.sh.
az webapp config set \ --resource-group <resource-group-name> \ --name <web-app-name> \ --startup-file start.shUtilisez la commande az webapp identity assign pour activer une identité managée affectée par le système pour le App Service.
az webapp identity assign \ --resource-group <resource-group-name> \ --name <web-app-name>Dans ce guide de démarrage rapide, une identité managée affectée par le système est utilisée à des fins de démonstration. Une identité managée affectée par l’utilisateur est plus efficace dans un plus large éventail de scénarios. Pour plus d’informations, consultez les suggestions relatives aux meilleures pratiques d’identités managées. Pour obtenir un exemple d’utilisation d’une identité managée affectée par l’utilisateur avec mssql-python, consultez Migrer une application Python pour utiliser des connexions sans mot de passe avec Azure SQL Database.
Connecter App Service à Azure SQL Database
Dans la section Configurer la base de données, vous avez configuré la mise en réseau et l’authentification Microsoft Entra pour le serveur SQL Database Azure. Dans cette section, vous terminez la configuration de la base de données et configurez App Service avec une chaîne de connexion pour accéder au serveur de base de données.
Pour exécuter ces commandes, vous pouvez utiliser n’importe quel outil ou IDE qui peut se connecter à Azure SQL Database, y compris SQL Server Management Studio (SSMS) et Visual Studio Code avec l’extension MSSQL. Vous pouvez également utiliser le portail Azure comme décrit dans le guide de démarrage rapide : utilisez l’éditeur de requête du portail Azure pour interroger Azure SQL Database.
Ajoutez un utilisateur à Azure SQL Database avec des commandes SQL pour créer un utilisateur et un rôle pour un accès sans mot de passe.
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>]Pour plus d’informations, voir Utilisateurs de base de données autonome - Rendre votre base de données portable. Pour obtenir un exemple qui montre le même principe, mais appliqué à une machine virtuelle Azure, consultez Tutoriel : utiliser une identité managée affectée par le système d’une machine virtuelle Windows pour accéder à Azure SQL. Pour plus d’informations sur les rôles attribués, consultez Rôles de base de données fixes.
Si vous désactivez puis activez l’identité managée affectée par le système App Service, supprimez l’utilisateur et recréez-le. Exécutez
DROP USER [<web-app-name>]et réexécutez les commandesCREATEetALTER. Pour afficher les utilisateurs, utilisezSELECT * FROM sys.database_principals.Utilisez la commande az webapp config appsettings set pour ajouter un paramètre d’application pour la chaîne de connexion.
az webapp config appsettings set \ --resource-group <resource-group-name> \ --name <web-app-name> \ --settings AZURE_SQL_CONNECTIONSTRING="<connection-string>"Pour l’application déployée, la chaîne de connexion doit ressembler à :
Server=<database-server-name>.database.windows.net;Database=<database-name>;Authentication=ActiveDirectoryMSI;Encrypt=yes;TrustServerCertificate=no;Remplacez
<database-server-name>et<database-name>par vos valeurs.La chaîne de connexion sans mot de passe ne contient pas de nom d’utilisateur ou de mot de passe. Au lieu de cela, lorsque l’application s’exécute dans Azure, le pilote mssql-python utilise le
ActiveDirectoryMSImode d’authentification pour s’authentifier automatiquement à l’aide de l’identité managée d’App Service.
Tester l’application déployée
Accédez à l’URL de l’application pour tester que la connexion à Azure SQL Database fonctionne. Vous pouvez localiser l’URL de votre application dans la page de vue d’ensemble d’App Service.
https://<web-app-name>.azurewebsites.net
Ajoutez /docs à l’URL pour afficher l’interface utilisateur Swagger et tester les méthodes d’API.
Félicitations ! Votre application est maintenant connectée à Azure SQL Database dans les environnements locaux et hébergés.