Nouveautés dans mssql-python

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.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 de requête par déclaration reste disponible en tant que propriété Connection.timeout .

Important

Si vous avez passé timeout à connect() annuler les requêtes de longue durée, ce comportement ne se produit plus. À la place.Connection.timeout Il en va de même si vous avez connect(timeout=) utilisé pour élargir le délai d’attente bulkcopy() de connexion utilisé pour sa connexion interne : réglez Connection.timeout avant de créer le curseur.

Pour plus d’informations, voir Délai d’attente de connexion.

bulkcopy() Rejeté timeout=0

Un de 0 générait une erreur de validation, même si 0 cela signifie qu’il n’y a pas de timeout délai d’attente dans l’API de copie en masse 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’un collectch d’un lecteur Arrow échouait, le chemin de nettoyage du pilote générait une seconde erreur qui remplaçait l’originale, de sorte que les appelants voyaient un échec de nettoyage plutôt que la raison de l’échec. Le nettoyage vérifie alors l’état du curseur en premier et conserve l’exception originale.

executemany() Les erreurs de conversion décimales incluaient les valeurs des paramètres

Une erreur de conversion décimale a executemany() signalé la valeur incriminée via l’exception chaînée, ce qui pouvait placer les données clients dans les journaux d’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.

Copies en bloc rejetées des types de Vue Arrow View

bulkcopy_arrow() ne pouvaient pas consommer des tableaux Arrow View de longueur variable, donc les colonnes Polaires string_view devaient d’abord être converties avec DataFrame.to_arrow() . Les valeurs de la Vue Chaîne et les NULL passent désormais directement par l’Interface de Données Arrow C.

Pour plus d’informations, voir 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érive désormais l’architecture de l’interpréteur et rapporte les repli sous forme d’avertissements.

mssql-python 1.13.0

Date de sortie : août 2026

Enhancements

Les binaires de pilotes ODBC sont livrés uniquement dans mssql-python-odbc

La version 1.13.0 supprime le libs/ plan de secours de la mssql-python roue 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. Passer une source de flèches vers bulkcopy() augmente TypeErrormaintenant .

Pour plus d’informations, voir intégration Apache Arrow et copie en bloc.

token_providerparameter for Microsoft Entra credentials

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 mutuellement exclusif avec le Authentication mot-clé et avec les jetons passés par attrs_before, et il ne prend en charge que le scope commercial cloud Azure.

Pour plus d’informations, consultez Authentification Microsoft Entra.

Pooling de connexions conscient de l’identité

Le pool de connexions sépare désormais les connexions selon l’identité Microsoft Entra. Dans les versions antérieures, le pool ne faisait que la clé sur la chaîne de connexion, ce qui permettait à la transmission d’une connexion authentifiée en tant qu’utilisateur à une demande faite par un autre. Le pilote n’acquiert également un jeton que lorsqu’une requête de connexion manque le pool, et rafraîchit une connexion en pool lorsque son jeton est dans les 5 minutes suivant l’expiration de la situation.

Pour plus d’informations, consultez Regroupement de connexions.

Corrections de bugs

executemany() insérait zéro ligne lorsque les NULLs apparaissaient après la première ligne

Un executemany() appel qui mélangeait des valeurs numériques non-NULL et NULL insérait zéro lignes et ne soulevait aucune exception, lorsque le premier 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 SQL_WVARCHAR convertisseur de sortie transformait les colonnes non-chaîne

L’enregistrement d’un convertisseur à une seule chaîne transformait également les valeurs int, décimales et de date , car le pilote revenait au SQL_WVARCHAR convertisseur pour toute colonne sans son propre convertisseur. Le pilote utilise désormais ce plan de secours uniquement lorsque le type Python mappé de 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 dépêche alors d’abord le code entier, puis le type Python, et enfin le SQL_WVARCHAR plan de secours.

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 côté serveur alloué et le parent Cursor dans un état incohérent, car cursor.arrow_reader() il retournait un script brut pyarrow.RecordBatchReader. 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é est levé AttributeError dans Cursor.__del__

Un curseur dont l’initialiseur a échoué a affiché un AttributeError an comme une exception non activable lors de la collecte des ordures.

Cursor.__init__ s’est levé avant de définir les closed attributs et hstmt , qui __del__ ont 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 séparée que la copie en masse ouvrait utilisait un délai d'attente de connexion codé en dur de 15 secondes que vous ne pouviez pas écraser depuis Python. Une connexion parent créée avec timeout=0 obtient toujours le 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() auparavant échouait Protocol Error: Unsupported TDS type for bulk copy: 0xF0 pour toute colonne de destination utilisant un type défini par l’utilisateur par un Common Language Runtime (CLR), y compris les types intégrés de géographie, de géométrie et de hiérarchie . Le pilote mappe désormais les colonnes UDT CLR vers varbinary(max) sur le fil et diffuse les octets que vous fournissez en charge utile de IBinarySerialize l’UDT. La correction est livrée en 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() et cursor.close()), ainsi que dans SQLDescribeParam pour les paramètres de valeur None, dans les configurations de tunnel SSH et de redirecteur en processus.
  • Paramètres fixes BINARY et VARBINARY NULL 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_python de 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 architectures arm64 et x86_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() Maintenant prend en charge Authentication=ActiveDirectoryServicePrincipal, donc vous pouvez insérer en bloc avec les identifiants du 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 VARCHAR et CHAR dans 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 masse et Objets lignes.

Corrections de bugs

  • Le système de roue fixe est donc simdutf toujours lié statiquement.
  • Correction des grandes insertions DECIMAL dans executemany().
  • 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 messages PRINT d’un ensemble de résultats à l’autre.
  • Correction de la gestion de Row dans le chemin de repli des données à l’exécution de executemany().
  • 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, voir Objets lignes.

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 roues compatibles RHEL 8.
  • J’ai restauré les roues Python 3.10 universal2 de macOS.
  • Meilleure maniabilité du UTF-16 grâce à simdutf.
  • Voie chaude optimisée 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 des échecs d’authentification pour qu’ils ouvrent mssql_python DB-API des exceptions au lieu de RuntimeError.
  • 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 VARCHAR selon les plateformes.
  • Correction des échecs cursor.bulkcopy() liés aux chaînes vides dans les colonnes NVARCHAR(MAX) et VARCHAR(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 indices SQL_DECIMAL et SQL_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=False est 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 complet pyarrow.Table.
  • cursor.arrow_batch() renvoie un seul pyarrow.RecordBatch.
  • cursor.arrow_reader() renvoie un pyarrow.RecordBatchReader pour 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, voir Objets lignes.

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.time lors des allers-retours pour les colonnes TIME(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 de données en masse haute performance 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, voir Découverte de 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(), et batch_execute().
  • Attributs de connexion via set_attr() et getinfo().
  • 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() et executemany().
  • 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. Utilisez EXECUTE à 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 %s et %d par ? 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.