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.
Cet article liste ce qui a changé à chaque version du pilote mssql-python, les plus récents en premier. Chaque section couvre les nouvelles fonctionnalités, les changements de comportement et les corrections de bugs pour une version.
Pour les versions actuellement prises en charge par Microsoft, voir Cycle de vie du support.
mssql-python 1.16.0
Date de sortie : octobre 2026
Enhancements
Prise en charge de Python 3.15
L’Index de paquet Python (PyPI) dispose désormais de wheels pour Python 3.15 sous Windows, Linux et macOS. La version propose 41 wheels couvrant Python 3.10 à 3.15.
Pour plus d’informations, voir cycle de vie du support.
Paquets Conda
Le pilote est désormais publié sur le canal microsoft d’Anaconda.org. Le package conda est un package autonome qui inclut les binaires du pilote ODBC et l’exécution Rust :
conda install -c microsoft mssql-python
Sous Linux, le package conda nécessite glibc 2.34 et versions ultérieures. Sous macOS, macOS 15 ou version ultérieure est requis. Pour la liste complète des plateformes et des exigences, voir Installer depuis conda.
Fournisseur natif à mssql-odbc adhésion facultative
Vous pouvez désormais sélectionner un fournisseur ODBC basé sur Rust nommé mssql-odbc. Le pilote ODBC 18 de Microsoft (msodbcsql18) reste le pilote par défaut. Sélectionnez le fournisseur avant la première connexion avec la variable d’environnement MSSQL_PYTHON_NATIVE_PROVIDER ou l’attribut mssql_python.native_provider. Votre code de l’application ne change pas.
Pour plus d’informations, voir Sélectionner le fournisseur ODBC natif.
Accès aux lignes de type dictionnaire avec row._mapping
Chaque Row possède désormais une propriété en lecture seule _mapping qui associe les noms des colonnes à des valeurs. Utilisez dict(row._mapping) pour convertir une ligne en dictionnaire sans combiner des valeurs avec cursor.description.
Pour plus d'informations, consultez Objets de ligne.
Rust runtime est livré dans le mssql-python-rs package
Le runtime Rust qui alimente la copie en vrac est désormais livré dans un paquet séparé, adapté à la version mssql-python-rs, au lieu d’être à l’intérieur de la wheel mssql-python. La commande pip install mssql-python l’installe automatiquement. La version 0.3.0 du package utilise des wheels d’interface binaire d’application (ABI) stable de CPython, de sorte que chaque wheel est compatible avec Python 3.10 et les versions ultérieures.
Pour plus d’informations, voir Dépendances requises.
Pack compagnon mssql-python-odbc mis à jour
Le pilote nécessite mssql-python-odbc désormais la version 18.6.2.2. Les packages wheel Linux sont divisés par bibliothèque C, donc les environnements glibc et musl (Alpine Linux) installent chacun uniquement les binaires ODBC Driver 18.6 correspondants.
Opérations de récupération plus rapides
Les opérations de récupération prennent moins de temps en Python :
-
fetchmany()etfetchall()construisentRowdes objets dans le chemin de récupération natif lorsque la connexion ne possède pas de convertisseurs de sortie et qu’aucune valeur uniqueidentifier n’est convertie en chaînes. - Les valeurs
date,timeetdatetimesont construites avec moins de surcharge. - Les métadonnées de colonne sont réutilisées pour l’ensemble de résultats courant au lieu d’être décrites à nouveau à chaque récupération.
- Les récupérations propres n’effectuent pas d’analyses diagnostiques répétées.
- Les index entiers comme
row[0]utilisent un chemin de recherche direct. -
fetchval()Saute les appels de journalisation de débogage lorsque la journalisation de débogage est désactivée.
Aucun changement de candidature n’est nécessaire.
Corrections de bugs
Les processus Windows pouvaient se bloquer lors de l’arrêt
Le pilote pouvait libérer son handle d’environnement ODBC après la finalisation Python, ce qui risquait une violation d’accès lorsqu’un processus Windows quittait. Le handle n’est plus relâché après la finalisation.
Les caractères U+FEFF et U+FFFE en tête ont été supprimés du texte récupéré
Lorsqu’une chaîne récupérée commençait par U+FEFF ou U+FFFE, le pilote considérait ce point de code comme une marque d’ordre d’octets et la retirait. Le pilote retourne alors la valeur complète pour les types bornés tels que nvarchar(n) et varchar(n). Les types de grande taille comme nvarchar(max) ne sont pas couverts par cette correction : un U+FEFF en tête est toujours retiré, et un U+FFFE en tête fait que la valeur est décodée avec un ordre d’octets incorrect.
Les connexions regroupées pouvaient garder une transaction vide ouverte
Une connexion poolée pourrait revenir au pool avec une transaction ouverte et vide ou avec l’autocommit désactivé. Le driver annule la transaction de la connexion physique et active l’autocommit avant de renvoyer la connexion au pool. Si ce nettoyage échoue, le pilote supprime la connexion au lieu de la remettre dans le pool.
Pour plus d’informations, consultez Regroupement de connexions.
Les paramètres de type définis par l’utilisateur manquaient de métadonnées de type
Les paramètres que vous déclarez comme des types définis par l’utilisateur de SQL Server avec setinputsizes() et SQL_SS_UDT (-151), tels que geography et geometry, obtiennent désormais leurs métadonnées de type du serveur avant la liaison. La correction concerne les valeurs None et les instructions réutilisées pour les paramètres déclarés. Le passage d’un None non déclaré à une colonne de type défini par l’utilisateur dans une instruction réutilisée échoue toujours.
setencoding() a ignoré les demandes non prises en charge sans avertissement
Le pilote envoie toujours des instructions Transact-SQL (T-SQL) et des paramètres str sous forme UTF-16LE. Appeler setencoding() avec un encodage ou ctype qui diffère de l’UTF-16LE avec SQL_WCHAR émet UserWarning désormais au lieu d’être ignoré silencieusement. Appeler setencoding() sans argument rétablit les paramètres par défaut sans avertissement.
Pour plus d’informations, consultez Gérer les connexions.
La journalisation native pouvait interpréter les métadonnées comme des directives de format
Lorsque la journalisation native était activée, les valeurs fournies par le serveur telles que les métadonnées de colonne Arrow étaient transmises au journaliseur natif sous forme de chaînes de format. Le pilote logiciel enregistre désormais ces valeurs comme du texte littéral.
La copie en masse ne mettait pas systématiquement entre guillemets les identifiants de destination
La copie en bloc met désormais entre guillemets et échappe de manière cohérente les noms des tables de destination, les noms des colonnes et les collationnements. Les noms multiparties et les noms cités entre crochets contenant des espaces ou des caractères ] fonctionnent. Un nom mal formé, comme un crochet non fermé ou un nom de table manquant, génère une erreur avant qu’aucune ligne ne soit envoyée.
Pour plus d’informations, voir Copie en masse.
mssql-python 1.15.0
Date de sortie : septembre 2026
Enhancements
setinputsizes() La gestion des paramètres s’exécute en code natif
La gestion des paramètres pour setinputsizes() s’effectue désormais via le pipeline d’exécution natif en C++, plutôt que via des appels Python pour chaque paramètre. Les instructions paramétrées larges, en lots et fréquemment exécutées passent moins de temps dans le traitement des paramètres côté Python. Aucun changement de candidature n’est nécessaire.
Pour plus d’informations, consultez Mappages de types de données.
Binary() accepte les objets memoryview
Binary() accepte désormais un memoryview en entrée binaire, ce qui vous permet de passer une vue sans copie d’un tampon sans devoir le convertir d’abord en bytes.
Pour plus d’informations, voir Données binaires.
Les constantes de type SQL Server sont disponibles depuis le mssql_python module
Les constantes de type SQL Server sont désormais exposées directement depuis le mssql_python module, ce qui les rend plus faciles à trouver lorsque vous déclarez des types de paramètres ou des métadonnées de type de lecture.
Pour plus d’informations, consultez Mappages de types de données.
Corrections de bugs
La journalisation simultanée pourrait bloquer le processus
Les routines natives de journalisation acquéraient le GIL et des mutex internes dans un ordre incohérent, de sorte qu’une application multithread avec la journalisation du pilote activée pouvait provoquer un interblocage. L’ordre des serrures est corrigé.
Les volants Windows ARM64 n'incluaient pas de cœur natif ARM64
La molette ARM64 de Windows ne proposait pas de binaire ARM64 mssql_py_core correspondant, ce qui a affecté la copie en masse sur cette plateforme. La roue est désormais livrée avec la version ARM64.
Pour plus d’informations, voir Copie en masse.
Les DLL Windows regroupées reposaient sur le chemin de recherche par processus
Les DLL du pilote et d’authentification fournies avec le package sont désormais chargées à partir de répertoires locaux au package. Les dépendances natives se résolvent sans dépendre de la configuration du chemin de recherche à l’échelle du processus, ce qui était peu fiable dans certains environnements de déploiement.
Decimal Les paramètres étaient liés différemment selon leur valeur
Un Decimal paramètre est désormais lié indépendamment SQL_NUMERIC de sa valeur d’exécution, donc le type décimal du paramètre reste le même entre les valeurs et les chemins d’exécution.
Pour plus d’informations, voir Données décimales et monétaires.
La liaison de paramètres utilisait des identifiants de type ODBC 2.x obsolètes
Les paramètres typés utilisent désormais des identifiants de type ODBC 3.x à la place de leurs équivalents ODBC 2.x, ce qui évite les incompatibilités avec les configurations actuelles des pilotes.
Connection.getinfo(SQL_DATABASE_NAME) A renvoyé une valeur non décodée
La valeur retournée pour SQL_DATABASE_NAME est maintenant décodée, donc le nom de la base de données revient sous forme de texte Python.
Pour plus d’informations, voir Gestion des connexions.
Le nettoyage du curseur a échoué lors de l’arrêt de l’interpréteur
Une connexion contenant des curseurs dans différents états de leur cycle de vie les libérait dans un ordre susceptible de faire planter le processus lorsqu’une partie de ce nettoyage intervenait pendant l’arrêt de l’interpréteur. L’arrêt s’achève désormais normalement.
Pour plus d’informations, voir Gestion du curseur.
MSSQL-Python 1.14.0
Date de sortie : août 2026
Enhancements
La détection et la liaison des paramètres s’exécutent en code natif
La détection et la liaison des types de paramètres s’exécutent désormais dans un pipeline natif unique au lieu d’appels Python par paramètre. Ce changement corrige un goulot d’étranglement important en termes de performance, avec des améliorations de débit de bout en bout plus élevées dans les opérations plus grandes comme les inserts en vrac. Aucun changement de candidature n’est nécessaire.
Corrections de bugs
L’argument timeout pour connect() définir le délai d’attente de requête au lieu du délai d’authentification
L’argument timeout fixe SQL_ATTR_LOGIN_TIMEOUT alors et limite la tentative d’authentification, ce que le nom de l’argument et la documentation décrivent. Dans les versions antérieures, cela devenait le délai d’attente des requêtes par état, donc connect(timeout=30) ne limitait pas la durée d’une tentative de connexion, et les requêtes étaient interrompues après 30 secondes. Le délai d’expiration de requête pour chaque instruction reste disponible via la propriété Connection.timeout.
Important
Si vous avez passé timeout à connect() pour annuler les requêtes de longue exécution, ce comportement ne se produit plus. Définissez Connection.timeout à la place. Il en va de même si vous avez utilisé connect(timeout=) pour augmenter le délai d’expiration de connexion que bulkcopy() utilise pour sa connexion interne : définissez Connection.timeout avant de créer le curseur.
Pour plus d’informations, voir Délai d’attente de connexion.
bulkcopy() Rejeté timeout=0
Une valeur de 0 pour 0 a provoqué une erreur de validation, même si timeout signifie qu’il n’y a pas de délai d’attente dans l’API de copie en bloc sous-jacente. La méthode accepte 0 et désactive désormais le délai d’attente de l’opération. Les valeurs négatives, non entières et booléennes sont toujours rejetées.
Pour plus d’informations, voir Copie en masse.
Le nettoyage a remplacé l’exception originale de récupération Arrow
Lorsqu’une récupération depuis un lecteur Arrow échouait, la procédure de nettoyage du pilote générait une seconde erreur qui remplaçait l’erreur d’origine, de sorte que les appelants obtenaient une erreur de nettoyage au lieu de la raison de l’échec de la récupération. Le nettoyage commence désormais par vérifier l’état du curseur et préserve l’exception d’origine.
executemany() Les erreurs de conversion décimales incluaient les valeurs des paramètres
Dans executemany(), un échec de conversion décimale a signalé la valeur fautive via l’exception chaînée, ce qui pouvait entraîner l’enregistrement de données client dans les journaux de l’application et les systèmes de surveillance. L’erreur ne rapporte alors que l’index de ligne, l’index de colonne et le type de valeur.
Pour plus d’informations, consultez Gestion des erreurs.
Copie en masse rejetée pour les types de vue Arrow
bulkcopy_arrow() ne pouvait pas prendre en charge les tableaux Arrow View à longueur variable, donc les colonnes Polars string_view devaient d’abord être converties avec DataFrame.to_arrow(). Les valeurs String View et les valeurs NULL transitent désormais directement via l’interface de données C d’Arrow.
Pour plus d’informations, consultez l’intégration Polars.
Le chargement des extensions Windows utilisait l’architecture CPU hôte
Sous Windows, le pilote choisissait son extension native en fonction du processeur hôte plutôt que de l’interpréteur en cours d’exécution, donc x64 Python sur un hôte ARM64 se chargeait via un chemin de secours et écrivait des notifications sur stdout. Le chargeur déduit désormais l’architecture de l’interpréteur et signale les solutions de repli sous forme d’avertissements.
mssql-python 1.13.0
Date de sortie : août 2026
Enhancements
Les binaires du pilote ODBC sont fournis uniquement dans mssql-python-odbc
La version 1.13.0 supprime le libs/ plan de secours de la mssql-python wheel et déclare mssql-python-odbc==18.6.2.1 dans install_requires. La commande pip install mssql-python produit toujours un pilote fonctionnel. Installez mssql-python-odbc explicitement lorsque vous installez avec --no-deps, ou depuis un index privé qui ne le reflète pas.
Pour plus d’informations, consultez Installation.
Copie en bloc provenant des sources Apache Arrow
La nouvelle cursor.bulkcopy_arrow() méthode charge des données déjà au format Apache Arrow, sans convertir chaque ligne en objets Python au préalable. Le passage d'une source Arrow à bulkcopy() lève désormais TypeError.
Pour plus d’informations, consultez l’intégration Apache Arrow et la copie en masse.
token_provider paramètre pour les informations d’identification Microsoft Entra
La connect() fonction et la Connection classe acceptent un token_provider argument, donc vous pouvez passer un objet de crédence, par exemple DefaultAzureCredential au lieu de nommer un mode d’authentification dans la chaîne de connexion. L’argument est incompatible avec le mot-clé Authentication et avec les jetons transmis via attrs_before, et il prend uniquement en charge l’étendue du cloud commercial Azure.
Pour plus d’informations, consultez Authentification Microsoft Entra.
Pool de connexions tenant compte de l’identité
Le groupe de connexions sépare désormais les connexions en fonction de l’identité Microsoft Entra. Dans les versions antérieures, le pool était indexé uniquement sur la chaîne de connexion, de sorte qu’il pouvait attribuer une connexion authentifiée au nom d’un utilisateur donné à une requête émise par un autre utilisateur. Le pilote n’acquiert un jeton que lorsqu’une requête de connexion ne peut pas être satisfaite par le pool, et il actualise une connexion du pool lorsque son jeton expire dans moins de 5 minutes.
Pour plus d’informations, consultez Regroupement de connexions.
Corrections de bugs
executemany() n’insérait aucune ligne lorsque des valeurs NULL apparaissaient après la première ligne
Un appel à executemany() qui combinait des valeurs numériques non-NULL et NULL n’insérait aucune ligne et ne générait aucune exception lorsque la première valeur NULL apparaissait après la première ligne. Ce comportement affectait les paramètres tinyint, smallint, int et float . Le pilote initialise désormais les indicateurs ODBC pour chaque paramètre numérique à largeur fixe avant l’exécution du tableau.
Un convertisseur de sortie SQL_WVARCHAR convertissait les colonnes non textuelles
L’enregistrement d’un convertisseur de chaîne unique transformait également les valeurs int, decimal et date, car le pilote se rabattait sur le convertisseur SQL_WVARCHAR pour toute colonne qui ne disposait pas de son propre convertisseur. Le pilote utilise désormais ce mécanisme de repli uniquement lorsque le type Python associé à la colonne est str ou bytes.
Les convertisseurs de sortie enregistrés par un code de type SQL entier ne s’exécutaient jamais
Les convertisseurs enregistrés avec un code entier de type SQL, comme SQL_DECIMAL, étaient stockés mais jamais invoqués, car le pilote ne distribuait que sur le type Python dans cursor.description. Le pilote effectue désormais le routage d’abord en fonction du code entier, puis du type Python, et enfin de la solution de repli SQL_WVARCHAR.
Important
Si vous avez enregistré des convertisseurs par code SQL entier dans une version antérieure, ces convertisseurs commencent à fonctionner lors de la mise à jour. Examinez-les avant de déployer, car les valeurs de colonne qui passaient auparavant sans changement sont désormais transformées.
Pour plus d’informations, voir Convertisseurs de type personnalisé.
Fermer un lecteur Arrow ne libérait pas le curseur côté serveur
La fermeture d’un lecteur Arrow laissait le curseur alloué côté serveur et le parent Cursor dans un état incohérent, car cursor.arrow_reader() renvoyait un pyarrow.RecordBatchReader brut. La méthode renvoie alors un wrapper dont close() la méthode libère le curseur côté serveur et réinitialise l’état du curseur, et le wrapper fonctionne comme un gestionnaire de contexte.
Pour plus d’informations, voir intégration Apache Arrow.
Un curseur partiellement initialisé a levé AttributeError dans Cursor.__del__
Un curseur dont l’initialiseur a échoué a levé un AttributeError comme une exception non activable lors d'une opération de nettoyage de la mémoire.
Cursor.__init__ s’est produit avant de définir les attributs closed et hstmt, que __del__ a ensuite essayé de lire. L’initialiseur place désormais les deux attributs avant tout code pouvant être soulevé, et __del__ protège son appel de journalisation afin qu’il reste en sécurité lors de l’arrêt de l’interpréteur.
MSSQL-Python 1.12.0
Date de sortie : juillet 2026
Enhancements
Package compagnon mssql-python-odbc autonome
Les binaires des pilotes ODBC sont désormais publiés séparément sous le nom mssql-python-odbc, un paquet compagnon uniquement dédié aux données et épinglé à la version 18.6.2. Vous n’avez pas besoin de modifier de code, car pip install mssql-python il suffit d’installer le pack compagnon avec. Le chargeur natif préfère le pack compagnon et revient aux binaires intégrés dans la mssql-python roue lorsqu’il n’est pas présent.
Pour plus d’informations, consultez Installation.
Corrections de bugs
cursor.bulkcopy() utilise maintenant le délai d’expiration de connexion de la connexion parent
bulkcopy() Utilise maintenant le délai d’expiration de connexion de sa connexion parente, que vous définissez avec connect(..., timeout=<seconds>). Auparavant, la connexion distincte qu’ouvrait la copie en bloc utilisait un délai d’expiration de connexion de 15 secondes codé en dur, que vous ne pouviez pas redéfinir depuis Python. Une connexion parente créée avec timeout=0 conserve le délai par défaut de 15 secondes.
Pour plus d’informations, voir Copie en masse.
cursor.bulkcopy() prend en charge les colonnes de type CLR définies par l’utilisateur
cursor.bulkcopy() échouait auparavant avec Protocol Error: Unsupported TDS type for bulk copy: 0xF0 pour toute colonne de destination utilisant un type CLR défini par l’utilisateur, y compris les types intégrés geography, geometry et hierarchyid. Le pilote associe désormais les colonnes UDT CLR au type varbinary(max) lors de la transmission et transmet en flux les octets que vous fournissez comme charge utile de l’UDT IBinarySerialize. Le correctif est disponible dans mssql_py_core 0.1.7.
Pour plus d’informations, voir Copie en masse et Mappages de types de données.
MSSQL-Python 1.11.0
Date de sortie : juillet 2026
Enhancements
Sémantique améliorée du gestionnaire de contexte
with connection: Il envoie maintenant la transaction lorsque le bloc sort proprement, puis la revient en arrière lorsqu’une exception quitte le bloc.
Pour plus d’informations, consultez Gestion des transactions.
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, vous pouvez ainsi effectuer des insertions en bloc avec des identifiants de principal de service.
Pour plus d’informations, voir Copie en masse et authentification Microsoft Entra.
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.
Pour plus d’informations, voir Copie en bloc et Objets de ligne.
Corrections de bugs
- Le système de roue fixe est donc
simdutftoujours lié statiquement. - Correction des grandes insertions
DECIMALdansexecutemany(). - 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 maintenant en charge Authentication=ActiveDirectoryMSI pour les identités managées affectées par le système et affectées par l’utilisateur.
Pour plus d’informations, voir Copie en masse et authentification Microsoft Entra.
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.
Pour plus d'informations, consultez Objets de ligne.
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 comprend :
- Des wheels compatibles RHEL 8.
- J’ai restauré les roues Python 3.10
universal2de macOS. - Meilleure maniabilité du UTF-16 grâce à
simdutf. - Chemin chaud optimisé
execute().
Impact sur la performance : Le débit d’exécution par lots s’améliore grâce aux optimisations du chemin chaud dans la execute() méthode.
Pour plus d’informations, consultez Installation.
Corrections de bugs
- Correction d’un problème où les échecs d’authentification déclenchent 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
cursor.bulkcopy()liés aux chaînes vides dans les colonnesNVARCHAR(MAX)etVARCHAR(MAX).
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
La nettoyage des chaînes de connexion utilise désormais un analyseur au lieu d’expressions régulières, donc les chaînes de connexion contenant des caractères spéciaux dans les champs de mot de passe et les valeurs entre crochets sont correctement analysées.
Pour plus d’informations, consultez Chaînes de connexion.
Corrections de bugs
- Correction de la libération du GIL lors des opérations bloquantes de connexion et de déconnexion ODBC.
- Correction des plantages de
setinputsizes()avec des indicesSQL_DECIMALetSQL_NUMERIC. - 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é. - Corrections des indices de type
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.
Ces méthodes ne créent pas d'objet Python pour chaque valeur. 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.
Pour plus d’informations, consultez Mappages de types de données.
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.
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.
Pour plus d'informations, consultez Objets de ligne.
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 de manière à inclure correctement les fractions de seconde pour les colonnes
TIME. - Correction de la copie en bloc 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 : février 2026
Nouvelles fonctionnalités
Prise en charge de la copie en masse
Le chargement massif de données à hautes performances est désormais disponible via cursor.bulkcopy(). 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.
Pour plus d’informations, voir Copie en masse.
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 2026
Nouvelles fonctionnalités
Classe de réglages
Configurez le comportement à l’échelle du module via la nouvelle Settings classe, qui inclut le lowercase paramètre pour les noms de colonnes dans cursor.description.
Pour plus d’informations, voir Configuration du module.
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 : janvier 2026
Nouvelles fonctionnalités
Méthodes de découverte de schéma
De nouvelles méthodes de curseur explorent les métadonnées de la base de données : tables(), columns(), primaryKeys(), foreignKeys(), procedures(), statistics(), , et getTypeInfo().
Pour plus d’informations, consultez Découverte du schéma.
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 : décembre 2025
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, avec add_output_converter(), get_output_converter(), remove_output_converter(), et clear_output_converters().
Pour plus d’informations, 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 : novembre 2025
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.
Pour plus d’informations, voir le pilote mssql-python.
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 de validation 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.