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.
Chaque version du pilote mssql-python introduit de nouvelles fonctionnalités, des améliorations de performance et des corrections de bugs. Les sections suivantes détaillent chaque version.
MSSQL-Python 1.11.0
Date de sortie : juillet 2026
Enhancements
Sémantique améliorée du gestionnaire de contexte
with connection: valide désormais correctement les transactions en cas de fermeture normale et les annule en cas d’exception, ce qui rend son comportement plus idiomatique en Python et plus prévisible.
import mssql_python
# On clean exit, transaction commits
with mssql_python.connect(connection_string) as conn:
cursor = conn.cursor()
cursor.execute("INSERT INTO MyTable (Name) VALUES ('Alice')")
# Automatically committed on exit
# On exception, transaction rolls back
try:
with mssql_python.connect(connection_string) as conn:
cursor = conn.cursor()
cursor.execute("INSERT INTO MyTable (Name) VALUES ('Bob')")
raise ValueError("Oops!")
except ValueError:
pass
# Changes rolled back on exit
Corrections de bugs
- Correction d’un interblocage lié au GIL dans le processus de démontage d’ODBC (
conn.close()etcursor.close()), ainsi que dansSQLDescribeParampour les paramètres de valeurNone, dans les configurations de tunnel SSH et de redirecteur en processus. - Paramètres fixes
BINARYetVARBINARYNULL dans les tables temporaires et les variables de table. Lorsque la résolution automatique de type échoue, le pilote émet alors un avertissement Python avec des indications explicitescursor.setinputsizes(). - Correction d’un problème empêchant
import mssql_pythonde fonctionner sur Apple Silicon avec une installation propre (régression dans la version 1.8.0). Les dépendances ODBC dylib fournies sont désormais réécrites pour les architecturesarm64etx86_64. - Correction d’un blocage GIL dans le cœur Rust qui gelait les opérations de copie en masse lors de l’authentification avec
Authentication=ActiveDirectoryServicePrincipal.
MSSQL-Python 1.10.0
Date de publication : juin 2026
Enhancements
Prise en charge de ActiveDirectoryServicePrincipal pour la copie en bloc
cursor.bulkcopy() prend désormais en charge Authentication=ActiveDirectoryServicePrincipal, permettant les insertions en bloc grâce aux informations d’identification du principal de service.
import mssql_python
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryServicePrincipal;"
"UID=<application-client-id>;"
"PWD=<client-secret>;"
"Encrypt=yes"
)
cursor = conn.cursor()
cursor.execute("CREATE TABLE ##SpDemo (ID INT, Value FLOAT)")
conn.commit()
result = cursor.bulkcopy("##SpDemo", [(1, 1.5), (2, 2.5)])
print(f"Copied {result['rows_copied']} rows")
Corrections de bugs
- Correction des données non ASCII dans
VARCHARetCHARdans le chemin de récupération d’Arrow. - Correction des délais d’expiration de connexion lors des opérations de chargement en masse.
mssql-python 1.9.0
Date de publication : juin 2026
Enhancements
Objets de ligne dans la copie en masse
cursor.bulkcopy() accepte désormais directement les objets Row récupérés, sans nécessiter de conversion manuelle en tuple.
import mssql_python
conn = mssql_python.connect(connection_string)
cursor = conn.cursor()
# Fetch rows from source table
cursor.execute("SELECT ProductID, Name, ListPrice FROM Production.Product")
rows = cursor.fetchall()
# Pass fetched Row objects directly to bulkcopy
cursor.execute("CREATE TABLE ##RowBulkDemo (ProductID INT, Name NVARCHAR(50), ListPrice MONEY)")
conn.commit()
result = cursor.bulkcopy("##RowBulkDemo", rows)
print(f"Copied {result['rows_copied']} rows")
Corrections de bugs
- Le système de roue fixe est donc
simdutftoujours lié statiquement. - Correction des grandes
DECIMALinsertions dansexecutemany(). - Correction du type incorrect de repli pour les paramètres NULL.
- Exception fixe des allers-retours aller-retour de cornichon et de décroche.
- Correction de
nextset()afin qu’il conserve les messagesPRINTd’un ensemble de résultats à l’autre. - Correction de la gestion de
Rowdans le chemin de repli des données à l’exécution deexecutemany(). - Vérification du type de méthode de récupération fixe pour les outils d’analyse statique.
mssql-python 1.8.0
Date de publication : mai 2026
Enhancements
Prise en charge de ActiveDirectoryMSI pour la copie en bloc
cursor.bulkcopy() Prend désormais en compte Authentication=ActiveDirectoryMSI les identités managées assignées par le système et par l’utilisateur.
import mssql_python
# System-assigned managed identity
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryMSI;"
"Encrypt=yes"
)
cursor = conn.cursor()
cursor.execute("CREATE TABLE ##MsiDemo (ID INT, Name NVARCHAR(50))")
conn.commit()
result = cursor.bulkcopy("##MsiDemo", [(1, "Alice"), (2, "Bob")])
print(f"Copied {result['rows_copied']} rows")
Indexation de ligne par clé de type chaîne
Vous pouvez désormais accéder aux valeurs de ligne par nom de colonne, par exemple row["col"], en plus de l’indexation positionnelle et de l’accès aux attributs.
import mssql_python
conn = mssql_python.connect(connection_string)
cursor = conn.cursor()
cursor.execute("SELECT ProductID, Name, ListPrice FROM Production.Product WHERE ProductID = 1")
row = cursor.fetchone()
# Access by column name (new in 1.8.0)
print(row["ProductID"]) # Access by key
print(row["Name"])
# Still supports positional indexing
print(row[0]) # Positional access
# And attribute access
print(row.Name) # Attribute access
Mise à jour du pilote ODBC incluse
Le pilote Microsoft ODBC pour SQL Server fourni a été mis à jour à la version 18.6.2.1.
Corrections de bugs
- Correction des problèmes liés à la durée de vie différée de l’attribut de connexion dans l’authentification basée sur des jetons.
- Correction de l’analyse répétée de la chaîne de connexion dans le processus d’authentification.
- Annotations de type fixe
executemany()pour les entrées de séquence.
MSSQL-Python 1.7.1
Date de publication : mai 2026
Enhancements
Couverture des roues élargie et améliorations de performance
Cette version ajoute des wheels compatibles avec RHEL 8, rétablit les wheels macOS pour Python 3.10 universal2, améliore la prise en charge de l’UTF-16 grâce à simdutf, et optimise le chemin critique de execute().
Impact sur la performance : Le débit d’exécution par lots s’améliore de ~15% sur les charges de travail typiques grâce aux optimisations du chemin chaud dans la execute() méthode.
Corrections de bugs
- Correction des échecs de connexion afin qu’ils génèrent des exceptions DB-API
mssql_pythonau lieu deRuntimeError. - Libération étendue de GIL en bloquant l’exécution, la récupération, la transaction et les appels d’attributs de connexion ODBC.
- Correction des défaillances
executemany()lorsque les valeurs décimales changent de signe. - Correction du décodage incohérent de CP1252
VARCHARselon les plateformes. - Correction des échecs liés aux chaînes vides dans les colonnes
NVARCHAR(MAX)etVARCHAR(MAX)cursor.bulkcopy().
Note
La version 1.7.0 a été retirée en raison de problèmes de publication. Utilisez la version 1.7.1 ou ultérieure.
MSSQL-Python 1.6.0
Date de publication : avril 2026
Enhancements
Sanitisation de chaîne de connexion basée sur l’analyseur syntaxique
Cette amélioration garantit un analyse correcte des caractères spéciaux dans les champs de mot de passe et les valeurs avec crochets.
import mssql_python
# Complex passwords with special characters now parse correctly
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"UID=user@contoso;"
"PWD={p@ssw0rd;with{braces}};" # Braced values now handled correctly
"Encrypt=yes"
)
La salubritisation des Connection string est passée de la logique basée sur des regex au traitement basé sur l’analyseur syntaxique pour une gestion correcte de la syntaxe des chaîne de connexion ODBC.
Corrections de bugs
- Correction de la libération du GIL lors des opérations bloquantes de connexion et de déconnexion ODBC.
- Correction
setinputsizes()des plantages avecSQL_DECIMALetSQL_NUMERICdes indices. - Correction du comportement incorrect
fetchone()pour les méthodes du catalogue ODBC. - Correction des erreurs liées à un état de curseur non valide lorsque
reset_cursor=Falseest utilisé. - Indices de type fixe
executemany()pour des séquences de paramètres basées sur la cartographie. - Ajout d’une protection contre la traversée de chemin pour
setup_logging(log_file_path=...).
MSSQL-Python 1.5.0
Date de publication : avril 2026
Nouvelles fonctionnalités
Prise en charge de la récupération Apache Arrow
Trois nouvelles méthodes de curseur permettent une récupération de données en colonnes haute performance via l’interface de données Arrow C :
-
cursor.arrow()renvoie un fichier completpyarrow.Table. -
cursor.arrow_batch()renvoie un seulpyarrow.RecordBatch. -
cursor.arrow_reader()renvoie unpyarrow.RecordBatchReaderpour le streaming.
L’implémentation contourne la création d’objets Python dans le chemin chaud pour améliorer les performances. Pour une documentation complète, voir l’intégration d’Apache Arrow.
prise en charge du type sql_variant
Le pilote détecte désormais les colonnes sql_variant lors de la récupération, résout leur type de base sous-jacent et renvoie des valeurs Python correctement typées au lieu d’octets bruts.
Note
sql_variant Les colonnes utilisent un chemin de récupération en streaming, qui peut avoir un léger impact sur les performances par rapport aux colonnes de type fixe.
Soutien natif de l’UUID
Un nouveau paramètre native_uuid permet de définir si les colonnes UNIQUEIDENTIFIER sont renvoyées sous forme d’objets uuid.UUID (par défaut) ou sous forme de chaînes en majuscules compatibles avec pyodbc. Configurez-le au niveau du module ou par connexion :
# Module-level default
settings = mssql_python.get_settings()
settings.native_uuid = True # default
# Per-connection override
conn = mssql_python.connect(connection_string, native_uuid=False)
Pour plus d’informations, voir Configuration du module.
Export public de la classe Row
La Row classe est désormais exportée au niveau supérieur pour les annotations de type :
from mssql_python import Row
Corrections de bugs
- Correction des faux positifs de détection de
?dans les identifiants entre crochets, les chaînes littérales et les commentaires. - Correction de la liaison de paramètres NULL pour les colonnes
VARBINARY(ne provoque plus d’erreurs de conversion implicites). - Correction de la perte de microsecondes dans les valeurs
datetime.timelors des allers-retours pour les colonnesTIME(1)àTIME(7). - Correction du chemin de récupération Arrow pour inclure correctement les fractions de seconde pour les colonnes
TIME. - Correction de la copie en masse avec les méthodes d’authentification Microsoft Entra ID (les champs d’identifiants obsolètes ne causent plus d’erreurs de validation).
- Mise en cache des instances d’identifiants Azure Identity au niveau du module pour améliorer les performances d’authentification.
mssql-python 1.4.0
Date de sortie : mars 2025
Nouvelles fonctionnalités
Prise en charge de la copie en masse
Le chargement de données massives à hautes performances est désormais disponible via cursor.bulkcopy():
import mssql_python
conn = mssql_python.connect(connection_string)
cursor = conn.cursor()
cursor.execute("CREATE TABLE ##BulkDemo (ID INT, Name NVARCHAR(50), Price DECIMAL(10,2))")
conn.commit()
data = [
(1, "Item 1", 10.50),
(2, "Item 2", 20.75),
# ... potentially millions of rows
]
result = cursor.bulkcopy("##BulkDemo", data)
print(f"Copied {result['rows_copied']} rows")
La méthode accepte les options pour batch_size, timeout, column_mappings, keep_identity, check_constraintstable_lock, keep_nulls, , fire_triggers, et use_internal_transaction.
Voir la copie en bloc pour la documentation complète.
Improvements
- Optimisations de performance pour de grands ensembles de résultats.
- Réduction de l’utilisation de la mémoire lors des opérations batch.
- Messages d’erreur améliorés pour les échecs de copies en masse.
MSSQL-Python 1.3.0
Date de sortie : janvier 2025
Nouvelles fonctionnalités
Classe de réglages
Configurez le comportement à l’échelle du module via la nouvelle Settings classe :
import mssql_python
settings = mssql_python.get_settings()
settings.lowercase = True # Lowercase column names in cursor.description
Voir la configuration du module pour plus de détails.
Improvements
- Meilleure gestion du délai d’expiration de la connexion lors du basculement d’Azure SQL.
- Compatibilité améliorée avec Python 3.13.
MSSQL-Python 1.2.0
Date de sortie : novembre 2024
Nouvelles fonctionnalités
Méthodes de découverte de schéma
Nouvelles méthodes de curseur pour l’exploration des métadonnées de base de données :
cursor = conn.cursor()
# List all tables
cursor.tables(schema="dbo")
# Get column information
cursor.columns(table="Product", schema="Production")
# Get primary keys
cursor.primaryKeys(table="Product", schema="Production")
# Get foreign key relationships
cursor.foreignKeys(table="SalesOrderDetail", schema="Sales")
# Get stored procedures
cursor.procedures(schema="dbo")
# Get index statistics
cursor.statistics(table="Product", schema="Production")
# Get type information
cursor.getTypeInfo()
Voir Découverte du schéma pour la documentation complète.
Improvements
- Mise en cache améliorée des métadonnées pour les requêtes répétées de schéma.
- Meilleure gestion des colonnes calculées dans les résultats
columns().
mssql-python 1.1.0
Date de sortie : septembre 2024
Nouvelles fonctionnalités
Convertisseurs de sortie personnalisés
Enregistrer des fonctions personnalisées pour transformer les valeurs des colonnes lors de la récupération :
import mssql_python
from decimal import Decimal
conn = mssql_python.connect(connection_string)
# Convert decimals to float (converter receives Decimal)
def decimal_to_float(value):
if value is None:
return None
return float(value) # value is already a Decimal object
conn.add_output_converter(mssql_python.SQL_DECIMAL, decimal_to_float)
# Custom money formatting
def format_money(value):
if value is None:
return "$0.00"
return f"${float(value):,.2f}" # value is already a Decimal object
conn.add_output_converter(mssql_python.SQL_DECIMAL, format_money)
Méthodes de gestion :
add_output_converter(sql_type, converter_func)get_output_converter(sql_type)remove_output_converter(sql_type)clear_output_converters()
Pour une documentation complète, voir Convertisseurs de type personnalisé.
Improvements
- Meilleurs messages d’erreur pour les échecs de conversion de type.
- Prise en charge des fonctions de convertisseur qui retournent
None.
MSSQL-Python 1.0.0
Date de sortie : juillet 2024
Version initiale en disponibilité générale
La première version de disponibilité générale de mssql-python, le pilote Python natif de Microsoft pour SQL Server.
Fonctionnalités de base
- Architecture DDBC : Connectivité directe à la base de données sans nécessiter d’installation de pilotes ODBC.
- Conformité à la DB-API 2.0 : Interface de base de données Python standard.
- Pool de connexions : gestion intégrée du pool de connexions.
- Authentification Microsoft Entra : Prise en charge complète de l’authentification basée sur l’identité Azure.
- Chiffrement TLS : Connexions sécurisées avec validation de certificat.
Caractéristiques de connexion
- 21 mots-clés de chaîne de connexion.
- 9 modes d’authentification (SQL, Windows, et 7 méthodes Microsoft Entra ID).
- Contrôle de la validation automatique.
- Méthodes d’exécution :
execute(),executemany(), etbatch_execute(). - Attributs de connexion via
set_attr()etgetinfo(). - Support du gestionnaire de contexte.
Caractéristiques du curseur
- Méthodes standard de récupération :
fetchone(),fetchmany(),fetchall(). - Méthodes étendues :
fetchval(),skip(). - Méthodes d’exécution :
execute()etexecutemany(). - Objets de ligne avec accès par attribut et par indice.
- Navigation dans plusieurs ensembles de résultats avec
nextset().
Prise en charge des types de données
- Tous les types natifs SQL Server.
- Correspondances de types Python↔SQL.
- Constantes de type SQL pour le type explicite (par exemple,
mssql_python.SQL_DECIMAL). - Gestion de NULL en Python
None.
Prise en charge des transactions
- Validation manuelle et annulation.
- Mode d’engagement automatique.
- Contrôle du niveau d’isolement.
- Détection et gestion des blocages.
Modes d’authentification
| Mode | Description |
|---|---|
| Authentification de SQL Server | Nom d'utilisateur et mot de passe |
| Authentification Windows | Trusted_Connection |
| ActiveDirectoryDefault | DefaultAzureCredential |
| ActiveDirectoryInteractive | Connexion basée sur navigateur |
| ActiveDirectoryDeviceCode | Flux de code de périphérique |
| Mot de passe Active Directory | Nom d’utilisateur et mot de passe Microsoft Entra (déprécié ; utilise ROPC) |
| ActiveDirectoryMSI | Identité gérée |
| ActiveDirectoryServicePrincipal | Service Principal |
| Intégré à Active Directory | Windows Kerberos |
Upgrade
De pyodbc
Pour des conseils détaillés sur la migration, voir Migrer depuis pyodbc.
Principales différences :
- Les styles de paramètres
?(qmark) et%(name)s(pyformat) sont pris en charge. Vos requêtes existantes?fonctionnent sans modifications. - Aucune
callproc()méthode. UtilisezEXECUTEà la place. - Pool de connexions intégré.
- Aucune dépendance externe à un pilote ODBC.
À partir de pymssql
Pour des conseils détaillés sur la migration, voir Migrer à partir de pymssql.
Principales différences :
- Remplacer les marqueurs de paramètre
%set%dpar?ou%(name)s. - Utilisez une chaîne de connexion au lieu d’arguments positionnels.
- Pas de dépendance à FreeTDS.
- Plusieurs curseurs simultanés par connexion.
- Les objets de ligne avec accès à l’attribut remplacent
as_dict=True.
Entre les versions mssql-python
Mettez à jour le pilote pour obtenir de nouvelles fonctionnalités et corrections.
pip install --upgrade mssql-python
Vérifiez les notes de version pour détecter d’éventuels changements avant de mettre à jour les systèmes de production.
Feuille de route
Pour les fonctionnalités à venir et la feuille de route de développement, consultez le dépôt GitHub.