Novità in mssql-python

Questo articolo elenca cosa è cambiato in ogni release del driver mssql-python, il più recente per la prima volta. Ogni sezione copre nuove funzionalità, cambiamenti comportamentali e correzioni di bug per una versione.

Per le versioni attualmente supportate da Microsoft, vedi ciclo di vita del supporto.

MSSQL-Python 1.14.0

Data di uscita: agosto 2026

Enhancements

Il rilevamento e il binding dei parametri vengono eseguiti in codice nativo

Il rilevamento e il binding dei tipi di parametri ora vengono eseguiti in una singola pipeline nativa invece di chiamate Python per parametro. Questo cambiamento risolve un significativo collo di bottiglia nelle prestazioni, con miglioramenti di throughput più elevati da end to end in operazioni più grandi come gli inserti in massa. Non è necessario cambiare la domanda.

Correzioni dei bug

L'argomento timeout per connect() impostare il timeout della query invece del timeout dell'autenticazione

L'argomento timeout ora imposta SQL_ATTR_LOGIN_TIMEOUT e limita il tentativo di autenticazione, che è ciò che descrivono il nome dell'argomento e la documentazione. Nelle versioni precedenti diventava il timeout per query per affermazione, quindi connect(timeout=30) non limitava la durata di un tentativo di connessione e abortiva le query dopo 30 secondi. Il timeout per query per istruzione rimane disponibile come proprietà Connection.timeout .

Importante

Se hai passato timeout a connect() per annullare query di lunga durata, quel comportamento non si ripete più. Invece set.Connection.timeout Lo stesso vale se ti sei affidato connect(timeout=) per allargare il timeout bulkcopy() di connessione che usa per la connessione interna: imposta Connection.timeout prima di creare il cursore.

Per maggiori informazioni, vedi Timeout di connessione.

bulkcopy() Rifiutato timeout=0

Un timeout di 0 generava un errore di validazione, anche se 0 significava nessun timeout nell'API di copia bulk sottostante. Il metodo ora accetta 0 e disabilita il timeout dell'operazione. I valori negativi, non interi e booleani sono ancora rifiutati.

Per ulteriori informazioni, vedi Copia in massa.

La pulizia ha sostituito l'eccezione originale di recupero di Arrow

Quando un recupero da un lettore Arrow falliva, il percorso di pulizia del driver generava un secondo errore che sostituiva quello originale, così i chiamanti vedevano un errore di pulizia invece del motivo del fallimento del recupero. Ora Cleanup controlla prima lo stato del cursore e preserva l'eccezione originale.

executemany() Gli errori di conversione decimale includevano i valori dei parametri

Un errore di conversione decimale in executemany() segnalava il valore incriminato tramite l'eccezione a catena, che poteva inserire i dati dei clienti nei log delle applicazioni e nei sistemi di monitoraggio. L'errore ora riporta solo l'indice delle righe, l'indice delle colonne e il tipo di valore.

Per altre informazioni, vedere Gestione degli errori.

Copia in blocco rifiutata dei tipi di Arrow View

bulkcopy_arrow() non potevano consumare array Arrow View a lunghezza variabile, quindi le colonne Polari string_view dovevano essere convertite prima con DataFrame.to_arrow() . I valori della Visualizzazione Stringa e i NULL ora passano direttamente attraverso l'Interfaccia Dati Arrow C.

Per ulteriori informazioni, vedi integrazione Polars.

Il caricamento delle estensioni Windows utilizzava l'architettura CPU host

Su Windows, il driver sceglieva la sua estensione nativa in base alla CPU host invece che all'interprete in esecuzione, così Python x64 su un host ARM64 veniva caricato tramite un percorso di riserva e scriveva notifiche su stdout. Il loader ora deriva l'architettura dall'interprete e riporta i fallback come avvisi.

mssql-python 1.13.0

Data di uscita: agosto 2026

Enhancements

I binari driver ODBC vengono assegnati solo in mssql-python-odbc

La versione 1.13.0 rimuove il libs/ fallback dalla mssql-python ruota e dichiara mssql-python-odbc==18.6.2.1 in install_requires. Il comando pip install mssql-python produce comunque un driver funzionante. Installa mssql-python-odbc esplicitamente quando installi con --no-deps, oppure da un indice privato che non lo specula.

Per altre informazioni, vedere Installazione.

Copia in blocco dalle fonti Apache Arrow

Il nuovo cursor.bulkcopy_arrow() metodo carica dati già in formato Apache Arrow, senza dover prima convertire ogni riga in oggetti Python. Passando una sorgente di Freccia a bulkcopy() ora aumenta TypeError.

Per maggiori informazioni, vedi integrazione Apache Arrow e copia in massa.

token_providerparameter for Microsoft Entra credentials

La connect() funzione e la Connection classe accettano un token_provider argomento, quindi puoi passare un oggetto credenziale come DefaultAzureCredential invece di nominare una modalità di autenticazione nella stringa di connessione. L'argomento è mutuamente esclusivo con la Authentication parola chiave e con i token passati attraverso attrs_before, e supporta solo lo scope commerciale cloud di Azure.

Per altre informazioni, vedere Autenticazione di Microsoft Entra.

Pooling di connessioni consapevole dell'identità

Il pool di connessioni ora separa le connessioni in base all'identità Microsoft Entra. Nelle versioni precedenti, il pool si registrava solo sulla stringa di connessione, così che il pool poteva consegnare una connessione autenticata come utente a una richiesta fatta da un altro. Il driver acquisisce anche un token solo quando una richiesta di connessione manca il pool, e aggiorna una connessione in pool quando il token è entro 5 minuti dalla scadenza.

Per maggiori informazioni, vedere pool di connessioni.

Correzioni dei bug

executemany() inserito zero righe quando apparivano i NULL dopo la prima riga

Una chiamata che mescolava valori numerici non-NULL e NULL inseriva righe zero e non faceva executemany() eccezioni, quando il primo NULL appariva dopo la prima riga. Questo comportamento influenzava i parametri tinyint, smallint, int e float . Il driver ora inizializza gli indicatori ODBC per ogni parametro numerico a larghezza fissa prima dell'esecuzione dell'array.

Un SQL_WVARCHAR convertitore di uscita trasformava colonne non a stringa

Registrare un convertitore a singola stringa trasformava anche i valori int, decimale e di data , perché il driver tornava al SQL_WVARCHAR convertitore per qualsiasi colonna senza un proprio convertitore. Il driver ora utilizza quel fallback solo quando il tipo Python mappato della colonna è str o bytes.

I convertitori di uscita registrati tramite codice intero di tipo SQL non sono mai stati eseguiti

I convertitori registrati con un codice intero di tipo SQL, come SQL_DECIMAL, venivano memorizzati ma mai invocati, perché il driver veniva dislocato solo sul tipo Python in cursor.description. Il driver ora invia prima il codice intero, poi il tipo Python e infine il SQL_WVARCHAR fallback.

Importante

Se registravi convertitori tramite codice SQL intero in una versione precedente, questi convertitori iniziano a funzionare quando aggiorni. Rivedili prima di implementare, perché i valori delle colonne che prima passavano inalterati ora vengono trasformati.

Per maggiori informazioni, vedi Convertitori di tipo personalizzati.

Chiudere un lettore Arrow non rilasciava il cursore lato server

Chiudendo un lettore Arrow, il cursore lato server era allocato e il genitore Cursor in uno stato incoerente, perché cursor.arrow_reader() restituiva un file grezzo pyarrow.RecordBatchReader. Il metodo ora restituisce un wrapper il cui close() metodo rilascia il cursore lato server e reimposta lo stato del cursore, e il wrapper funziona come gestore di contesto.

Per maggiori informazioni, vedi integrazione con Apache Arrow.

Un cursore parzialmente inizializzato sollevato AttributeError in Cursor.__del__

Un cursore il cui inizializzatore non funzionava sollevò un AttributeError a come eccezione non rialzabile durante la raccolta dei rifiuti.

Cursor.__init__ si è alzato prima di impostare gli closed attributi e, hstmt che __del__ poi hanno cercato di leggere. L'inizializzatore ora imposta entrambi gli attributi prima di qualsiasi codice che possa essere sollevato, e __del__ protegge la chiamata di logging in modo che rimanga sicura durante lo spegnimento dell'interprete.

mssql-python 1.12.0

Data di uscita: luglio 2026

Enhancements

Pacchetto complementare mssql-python-odbc autonomo

I binari dei driver ODBC sono ora pubblicati separatamente come mssql-python-odbc, un pacchetto companion solo dati fissato alla versione 18.6.2. Non devi cambiare alcun codice, perché pip install mssql-python installa il pacchetto companion con esso. Il loader nativo preferisce il pacchetto compagno e torna ai binari raggruppati all'interno della mssql-python ruota quando non è presente.

Per altre informazioni, vedere Installazione.

Correzioni dei bug

cursor.bulkcopy() ora utilizza il timeout di connessione della connessione padre

bulkcopy() Ora usa il timeout di connessione della sua connessione genitore, che imposti con connect(..., timeout=<seconds>). In precedenza, la connessione separata che si apre la copia in massa usava un timeout di connessione hardcoded di 15 secondi che non si poteva sovrascrivere da Python. Una connessione genitore creata con timeout=0 ottiene comunque il valore predefinito di 15 secondi.

Per ulteriori informazioni, vedi Copia in massa.

cursor.bulkcopy() supporta colonne di tipo definite dall'utente CLR

cursor.bulkcopy() in precedenza falliva Protocol Error: Unsupported TDS type for bulk copy: 0xF0 per qualsiasi colonna di destinazione che utilizzasse un tipo definito dall'utente in Common Language Runtime (CLR), inclusi i tipi integrati di geografia, geometria e hierarchid . Il driver ora mappa le colonne UDT CLR a varbinary(max) sul cavo e trasmette in streaming i byte che fornisci come payload dell'UDT IBinarySerialize . La correzione viene fornita in mssql_py_core 0.1.7.

Per maggiori informazioni, vedi Copia in massa e Mappature dei tipi di dati.

MSSQL-python 1.11.0

Data di uscita: luglio 2026

Enhancements

Semantica migliorata del gestore di contesto

with connection: ora effettua il commit della transazione quando il blocco esce pulitamente, e la riporta quando un'eccezione esce dal blocco.

Per altre informazioni, vedere Gestione delle transazioni.

Correzioni dei bug

  • Corretto un deadlock del GIL nella fase di teardown di ODBC (conn.close() e cursor.close()) e in SQLDescribeParam per i parametri con valore None nelle configurazioni con tunnel SSH e forwarder in-process.
  • Parametri fissi BINARY e VARBINARY NULL nelle tabelle temporanee e nelle variabili della tabella. Quando la risoluzione automatica dei tipi fallisce, il driver emette un avviso Python con indicazioni esplicitecursor.setinputsizes().
  • Risolto il problema di import mssql_python su Apple Silicon dopo un'installazione pulita (regressione introdotta nella versione 1.8.0). Le dipendenze incluse delle librerie dinamiche ODBC sono ora riscritte sia per l'architettura arm64 sia per l'architettura x86_64.
  • Corretto un deadlock GIL nel core Rust che bloccava le operazioni di copia in blocco durante l'autenticazione con Authentication=ActiveDirectoryServicePrincipal.

mssql-python 1.10.0

Data di rilascio: giugno 2026

Enhancements

Supporto ActiveDirectoryServicePrincipal per la copia in blocco

cursor.bulkcopy() Ora supporta Authentication=ActiveDirectoryServicePrincipal, quindi puoi inserire in massa con le credenziali del principale di servizio.

Per ulteriori informazioni, vedi Copia in blocco e autenticazione Microsoft Entra.

Correzioni dei bug

  • Corretti i dati non ASCII VARCHAR e CHAR nel percorso di fetch di Arrow.
  • Risolti i timeout di connessione durante le operazioni di caricamento massivo.

MSSQL-Python 1.9.0

Data di rilascio: giugno 2026

Enhancements

Oggetti riga in copia in blocco

cursor.bulkcopy() ora accetta direttamente gli oggetti Row recuperati invece di richiedere la conversione manuale in tupla.

Per ulteriori informazioni, vedi Copia in blocco e Oggetti riga.

Correzioni dei bug

  • Packaging a ruote fisse, quindi simdutf è sempre collegato staticamente.
  • Sono stati sistemati inserti grandi DECIMAL in executemany().
  • Corretto il fallback del tipo errato per i parametri NULL.
  • Corretta un'eccezione nei round-trip di pickle e unpickle.
  • Corretto nextset() affinché mantenga PRINT i messaggi nei vari set di risultati.
  • Corretta la gestione di Row nel percorso di fallback executemany() data-at-execution.
  • Controllo del tipo di metodo fetch fisso per strumenti di analisi statica.

MSSQL-Python 1.8.0

Data di rilascio: maggio 2026

Enhancements

Supporto ActiveDirectoryMSI per la copia di massa

cursor.bulkcopy() ora supporta Authentication=ActiveDirectoryMSI per le identità gestite assegnate dal sistema e dall'utente.

Per ulteriori informazioni, vedi Copia in blocco e autenticazione Microsoft Entra.

Indicizzazione delle righe con chiave stringa

Ora puoi accedere ai valori delle righe per nome di colonna, ad esempio row["col"], oltre all'indicizzazione posizionale e all'accesso agli attributi.

Per maggiori informazioni, vedi Oggetti riga.

Aggiornamento del driver ODBC incluso

Il driver Microsoft ODBC per SQL Server è stato aggiornato alla versione 18.6.2.1.

Correzioni dei bug

  • Corretti i problemi relativi al ciclo di vita differito degli attributi di connessione nell'autenticazione basata su token.
  • Corretto il parsing ripetuto di stringa di connessione nel percorso di autenticazione.
  • Annotazioni di tipo fisso executemany() per gli ingressi di sequenza.

mssql-python 1.7.1

Data di rilascio: maggio 2026

Enhancements

Copertura delle ruote ampliata e miglioramenti delle prestazioni

Questa versione include:

  • Cerchi compatibili con RHEL 8.
  • Ripristinato le ruote di macOS Python 3.10universal2.
  • Gestione migliorata dell'UTF-16 tramite simdutf.
  • Percorso caldo ottimizzato execute() .

Impatto sulle prestazioni: la velocità di esecuzione batch migliora grazie alle ottimizzazioni del percorso caldo nel execute() metodo.

Per altre informazioni, vedere Installazione.

Correzioni dei bug

  • Corretti i fallimenti di autenticazione in modo che allevassero mssql_python DB-API eccezioni invece di RuntimeError.
  • Rilascio esteso GIL bloccando l'esecuzione, il fetch, la transazione e le chiamate agli attributi di connessione ODBC.
  • Corretti i problemi executemany() in caso di cambio di segno dei valori decimali.
  • Corretta la decodifica incoerente di CP1252 VARCHAR su diverse piattaforme.
  • Corretti i problemi cursor.bulkcopy() relativi alle stringhe vuote nelle colonne NVARCHAR(MAX) e VARCHAR(MAX).

Note

La versione 1.7.0 è stata ritirata a causa di problemi di pubblicazione. Usa la versione 1.7.1 o successiva.

MSSQL-Python 1.6.0

Data di rilascio: aprile 2026

Enhancements

Sanitizzazione delle stringa di connessione basata su parser

La sanitizzazione delle stringhe di connessione ora utilizza un parser invece delle espressioni regolari, quindi le stringhe di connessione che contengono caratteri speciali nei campi delle password e i valori con bracciato analizzano correttamente.

Per altre informazioni, vedere Stringhe di connessione.

Correzioni dei bug

  • Rilascio GIL corretto durante il blocco delle operazioni di connessione e disconnessione ODBC.
  • Risolti i crash con setinputsizes() che si verificavano con i suggerimenti SQL_DECIMAL e SQL_NUMERIC.
  • Corretto il comportamento errato di fetchone() nei metodi del catalogo ODBC.
  • Corretti gli errori di stato non valido del cursore quando reset_cursor=False viene usato.
  • Suggerimenti di tipo fisso executemany() per sequenze di parametri basate sulla mappatura.
  • Aggiunta una guardia per l'attraversamento del percorso per setup_logging(log_file_path=...).

MSSQL-Python 1.5.0

Data di rilascio: aprile 2026

Nuove funzionalità

Supporto per il fetch di Apache Arrow

Tre nuovi metodi di cursore offrono il recupero di dati columnari ad alte prestazioni tramite l'Interfaccia Dati Arrow C:

  • cursor.arrow() restituisce un pyarrow.Table completo.
  • cursor.arrow_batch() restituisce un singolo pyarrow.RecordBatch.
  • cursor.arrow_reader() restituisce un pyarrow.RecordBatchReader per lo streaming.

Questi metodi non creano un oggetto Python per ogni valore. Per la documentazione completa, vedi integrazione con Apache Arrow.

supporto per il tipo sql_variant

Il driver ora rileva sql_variant le colonne al momento del recupero, ne risolve il tipo base sottostante e restituisce valori Python correttamente tipizzati invece dei byte grezzi.

Note

sql_variant Le colonne utilizzano un percorso di recupero in streaming, che potrebbe avere un leggero impatto sulle prestazioni rispetto alle colonne di tipo fisso.

Per altre informazioni, vedere Mapping dei tipi di dati.

Supporto UUID nativo

Una nuova native_uuid impostazione determina se UNIQUEIDENTIFIER le colonne vengono restituite come uuid.UUID oggetti (predefinito) o come stringhe maiuscole compatibili con pyodbc. Configuralo a livello di modulo o per connessione.

Per ulteriori informazioni, vedi Configurazione dei moduli.

Esportazione pubblica della classe a file

La Row classe viene ora esportata al livello superiore per le annotazioni di tipo.

Per maggiori informazioni, vedi Oggetti riga.

Correzioni dei bug

  • Corretto il rilevamento dei falsi positivi ? all'interno di identificatori tra parentesi, letterali stringa e commenti.
  • Corretto il binding dei parametri NULL per le colonne VARBINARY (non genera più errori di conversione implicita).
  • Valori fissi datetime.time che perdono microsecondi nei viaggi di andata e ritorno per TIME(1) colonne di passaggio TIME(7) .
  • Ho corretto il percorso di recupero delle frecce per includere correttamente le frazioni di secondo per TIME le colonne.
  • Corretta la copia in blocco relativa ai metodi di autenticazione di Microsoft Entra ID (i campi delle credenziali obsoleti non causano più errori di convalida).
  • Istanze di credenziali Azure Identity memorizzate nella cache a livello di modulo per migliorare le prestazioni di autenticazione.

MSSQL-Python 1.4.0

Data di uscita: febbraio 2026

Nuove funzionalità

Supporto per la copia di massa

Il caricamento di dati ad alte prestazioni è ora disponibile tramite cursor.bulkcopy(). Il metodo accetta opzioni per batch_size, timeout, column_mappings, keep_identity, check_constraintstable_lock, keep_nulls, , fire_triggers, e use_internal_transaction.

Per ulteriori informazioni, vedi Copia in massa.

Improvements

  • Ottimizzazioni delle prestazioni per grandi set di risultati.
  • Riduzione dell'uso di memoria durante le operazioni batch.
  • Messaggi di errore migliorati per fallimenti di copia in massa.

MSSQL-Python 1.3.0

Data di uscita: gennaio 2026

Nuove funzionalità

Classe di ambientazione

Configurare il comportamento a livello di modulo tramite la nuova Settings classe, che include l'impostazione lowercase per i nomi delle colonne in cursor.description.

Per ulteriori informazioni, vedi Configurazione dei moduli.

Improvements

  • Gestione migliore del timeout della connessione durante il failover Azure SQL.
  • Compatibilità migliorata con Python 3.13.

MSSQL-Python 1.2.0

Data di uscita: gennaio 2026

Nuove funzionalità

Metodi di scoperta dello schema

Nuovi metodi a cursore esplorano i metadati del database: tables(), columns(), primaryKeys(), foreignKeys(), procedures(), statistics(), e getTypeInfo().

Per ulteriori informazioni, vedi Scoperta dello schema.

Improvements

  • Cache dei metadati migliorata per le query ripetute dello schema.
  • Migliore gestione delle colonne calcolate nei columns() risultati.

MSSQL-python 1.1.0

Data di uscita: dicembre 2025

Nuove funzionalità

Convertitori di uscita personalizzati

Registrare funzioni personalizzate per trasformare i valori delle colonne durante il fetch, con add_output_converter(), get_output_converter(), remove_output_converter(), e clear_output_converters().

Per maggiori informazioni, vedi Convertitori di tipo personalizzati.

Improvements

  • Messaggi di errore migliori in caso di errore nella conversione del tipo.
  • Supporto per funzioni convertitrici che restituiscono None.

MSSQL-Python 1.0.0

Data di uscita: novembre 2025

Versione iniziale GA

La prima versione di disponibilità generale di mssql-python, il driver Python nativo di Microsoft per SQL Server.

Per maggiori informazioni, vedi driver mssql-python.

Funzionalità di base

  • Architettura DDBC: Connettività diretta al database senza richiedere l'installazione di driver ODBC.
  • Conformità a DB-API 2.0: interfaccia standard per database di Python.
  • Pool di connessioni: gestione integrata del pool di connessioni.
  • Autenticazione Microsoft Entra: Supporto completo per l'autenticazione basata sull'identità di Azure.
  • Crittografia TLS: Connessioni sicure con validazione dei certificati.

Caratteristiche di connessione

  • 21 parole chiave della stringa di connessione.
  • 9 modalità di autenticazione (SQL, Windows e 7 metodi Microsoft Entra ID).
  • Controllo dell'autocommit.
  • Metodi di esecuzione: execute(), executemany(), e batch_execute().
  • Attributi di connessione attraverso set_attr() e getinfo().
  • Supporto per il gestore di contesto.

Caratteristiche del cursore

  • Metodi standard di riporto: fetchone(), fetchmany(), fetchall().
  • Metodi estesi: fetchval(), skip().
  • Metodi di esecuzione: execute() e executemany().
  • Oggetti di riga con accesso tramite attributi e indici.
  • Navigazione tra set di risultati multipli con nextset().

Supporto dei tipi di dati

  • Tutti tipi nativi di SQL Server.
  • Mappature dei tipi Python↔SQL.
  • Costanti di tipo SQL per tipizzazione esplicita (ad esempio, mssql_python.SQL_DECIMAL).
  • Gestione di NULL in PythonNone.

Supporto delle transazioni

  • Commit e rollback manuali.
  • Modalità auto-commit.
  • Controllo del livello di isolamento.
  • Rilevamento e gestione dei deadlock.

Modalità di autenticazione

Mode Descrizione
Autenticazione di SQL Server Nome utente e password
Autenticazione di Windows Trusted_Connection
ActiveDirectoryDefault DefaultAzureCredential
ActiveDirectoryInteractive Accesso tramite browser
ActiveDirectoryDeviceCode Flusso del codice del dispositivo
ActiveDirectoryPassword Nome utente e password di Microsoft Entra (deprecati; usa ROPC)
ActiveDirectoryMSI Identità gestita
ActiveDirectoryServicePrincipal Service Principal
ActiveDirectoryIntegrated Windows Kerberos

Upgrade

Da pyodbc

Per linee guida dettagliate sulla migrazione, vedi Migrate from pyodbc.

Differenze principali:

  • Sono supportati entrambi gli stili di parametri: ? (qmark) e %(name)s (pyformat). Le tue query esistenti ? funzionano senza cambiamenti.
  • Nessun metodo callproc(). Usa invece le istruzioni EXECUTE.
  • Pooling di connessione integrato.
  • Nessuna dipendenza da driver ODBC esterni.

Da pymssql

Per indicazioni dettagliate sulla migrazione, vedi Migrate from pymssql.

Differenze principali:

  • Sostituire i marcatori di parametro %s e %d con ? o %(name)s.
  • Usa una stringa di connessione invece degli argomenti posizionali.
  • Nessuna dipendenza da FreeTDS.
  • Più cursori concorrenti per connessione.
  • Gli oggetti riga con accesso agli attributi sostituiscono as_dict=True.

Tra le versioni di mssql-python

Aggiorna il driver per ottenere nuove funzionalità e correzioni.

pip install --upgrade mssql-python

Controlla le note di rilascio per eventuali cambiamenti improvvisi prima di aggiornare i sistemi di produzione.

Roadmap

Per le prossime funzionalità e la roadmap di sviluppo, consulta il repository GitHub.