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 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 View

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 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. 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 requête émise par un autre utilisateur une connexion authentifiée au nom d’un utilisateur donné. 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é 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 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() 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() 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 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 bloc et Objets de ligne.

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 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 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 d’un problème où les échecs d’authentification déclenchent des exceptions DB-API mssql_python 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 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.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 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(), 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.