Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Ogni release del driver mssql-python introduce nuove funzionalità, miglioramenti delle prestazioni e correzioni di bug. Le sezioni seguenti dettagliano ogni versione.
MSSQL-python 1.11.0
Data di uscita: luglio 2026
Enhancements
Semantica migliorata del gestore di contesto
with connection: ora esegue correttamente il commit delle transazioni in caso di uscita corretta e il rollback in caso di eccezione, rendendolo più in linea con Python e prevedibile.
import mssql_python
# On clean exit, transaction commits
with mssql_python.connect(connection_string) as conn:
cursor = conn.cursor()
cursor.execute("INSERT INTO MyTable (Name) VALUES ('Alice')")
# Automatically committed on exit
# On exception, transaction rolls back
try:
with mssql_python.connect(connection_string) as conn:
cursor = conn.cursor()
cursor.execute("INSERT INTO MyTable (Name) VALUES ('Bob')")
raise ValueError("Oops!")
except ValueError:
pass
# Changes rolled back on exit
Correzioni dei bug
- Corretto un deadlock del GIL nella fase di teardown di ODBC (
conn.close()ecursor.close()) e inSQLDescribeParamper i parametri con valoreNonenelle configurazioni con tunnel SSH e forwarder in-process. - Parametri fissi
BINARYeVARBINARYNULL 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_pythonsu 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'architetturaarm64sia per l'architetturax86_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, consentendo inserimenti in blocco tramite credenziali del service principal.
import mssql_python
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryServicePrincipal;"
"UID=<application-client-id>;"
"PWD=<client-secret>;"
"Encrypt=yes"
)
cursor = conn.cursor()
cursor.execute("CREATE TABLE ##SpDemo (ID INT, Value FLOAT)")
conn.commit()
result = cursor.bulkcopy("##SpDemo", [(1, 1.5), (2, 2.5)])
print(f"Copied {result['rows_copied']} rows")
Correzioni dei bug
- Corretti i dati non ASCII
VARCHAReCHARnel 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.
import mssql_python
conn = mssql_python.connect(connection_string)
cursor = conn.cursor()
# Fetch rows from source table
cursor.execute("SELECT ProductID, Name, ListPrice FROM Production.Product")
rows = cursor.fetchall()
# Pass fetched Row objects directly to bulkcopy
cursor.execute("CREATE TABLE ##RowBulkDemo (ProductID INT, Name NVARCHAR(50), ListPrice MONEY)")
conn.commit()
result = cursor.bulkcopy("##RowBulkDemo", rows)
print(f"Copied {result['rows_copied']} rows")
Correzioni dei bug
- Packaging a ruote fisse, quindi
simdutfè sempre collegato staticamente. - Sono stati sistemati inserti grandi
DECIMALinexecutemany(). - Corretto il fallback del tipo errato per i parametri NULL.
- Corretta un'eccezione nei round-trip di pickle e unpickle.
- Corretto
nextset()affinché mantengaPRINTi messaggi nei vari set di risultati. - Corretta la gestione di
Rownel percorso di fallbackexecutemany()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.
import mssql_python
# System-assigned managed identity
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryMSI;"
"Encrypt=yes"
)
cursor = conn.cursor()
cursor.execute("CREATE TABLE ##MsiDemo (ID INT, Name NVARCHAR(50))")
conn.commit()
result = cursor.bulkcopy("##MsiDemo", [(1, "Alice"), (2, "Bob")])
print(f"Copied {result['rows_copied']} rows")
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.
import mssql_python
conn = mssql_python.connect(connection_string)
cursor = conn.cursor()
cursor.execute("SELECT ProductID, Name, ListPrice FROM Production.Product WHERE ProductID = 1")
row = cursor.fetchone()
# Access by column name (new in 1.8.0)
print(row["ProductID"]) # Access by key
print(row["Name"])
# Still supports positional indexing
print(row[0]) # Positional access
# And attribute access
print(row.Name) # Attribute access
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 aggiunge wheel compatibili con RHEL 8, ripristina i wheel di macOS per Python 3.10 universal2, migliora la gestione di UTF-16 tramite simdutf e ottimizza il percorso critico di execute().
Impatto sulle prestazioni: la velocità di esecuzione batch migliora di ~15% rispetto ai carichi di lavoro tipici grazie alle ottimizzazioni del percorso caldo nel execute() metodo.
Correzioni dei bug
- Corretti gli errori di accesso in modo che generino eccezioni DB-API
mssql_pythoninvece diRuntimeError. - 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
VARCHARsu diverse piattaforme. - Corretti i problemi
cursor.bulkcopy()relativi alle stringhe vuote nelle colonneNVARCHAR(MAX)eVARCHAR(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
Questo miglioramento garantisce la corretta interpretazione dei caratteri speciali nei campi della password e nei valori racchiusi tra parentesi graffe.
import mssql_python
# Complex passwords with special characters now parse correctly
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"UID=user@contoso;"
"PWD={p@ssw0rd;with{braces}};" # Braced values now handled correctly
"Encrypt=yes"
)
La sanitizzazione delle Connection string passò dalla logica basata su regex all'elaborazione basata su parser per la corretta gestione della sintassi delle stringa di connessione ODBC.
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 suggerimentiSQL_DECIMALeSQL_NUMERIC. - Corretto il comportamento errato di
fetchone()nei metodi del catalogo ODBC. - Corretti gli errori di stato non valido del cursore quando
reset_cursor=Falseviene 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 unpyarrow.Tablecompleto. -
cursor.arrow_batch()restituisce un singolopyarrow.RecordBatch. -
cursor.arrow_reader()restituisce unpyarrow.RecordBatchReaderper lo streaming.
L'implementazione evita la creazione di oggetti Python nel percorso critico per migliorare le prestazioni. 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.
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:
# Module-level default
settings = mssql_python.get_settings()
settings.native_uuid = True # default
# Per-connection override
conn = mssql_python.connect(connection_string, native_uuid=False)
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:
from mssql_python import Row
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.timeche perdono microsecondi nei viaggi di andata e ritorno perTIME(1)colonne di passaggioTIME(7). - Ho corretto il percorso di recupero delle frecce per includere correttamente le frazioni di secondo per
TIMEle 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: marzo 2025
Nuove funzionalità
Supporto per la copia di massa
Il caricamento massivo di dati ad alte prestazioni è ora disponibile tramite cursor.bulkcopy():
import mssql_python
conn = mssql_python.connect(connection_string)
cursor = conn.cursor()
cursor.execute("CREATE TABLE ##BulkDemo (ID INT, Name NVARCHAR(50), Price DECIMAL(10,2))")
conn.commit()
data = [
(1, "Item 1", 10.50),
(2, "Item 2", 20.75),
# ... potentially millions of rows
]
result = cursor.bulkcopy("##BulkDemo", data)
print(f"Copied {result['rows_copied']} rows")
Il metodo accetta opzioni per batch_size, timeout, column_mappings, keep_identity, check_constraintstable_lock, keep_nulls, , fire_triggers, e use_internal_transaction.
Vedi Copia in blocco per la documentazione completa.
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 2025
Nuove funzionalità
Classe di ambientazione
Configura il comportamento a livello di modulo tramite la nuova Settings classe:
import mssql_python
settings = mssql_python.get_settings()
settings.lowercase = True # Lowercase column names in cursor.description
Vedi configurazione del modulo per i dettagli.
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: novembre 2024
Nuove funzionalità
Metodi di scoperta dello schema
Nuovi metodi di cursore per l'esplorazione dei metadati del database:
cursor = conn.cursor()
# List all tables
cursor.tables(schema="dbo")
# Get column information
cursor.columns(table="Product", schema="Production")
# Get primary keys
cursor.primaryKeys(table="Product", schema="Production")
# Get foreign key relationships
cursor.foreignKeys(table="SalesOrderDetail", schema="Sales")
# Get stored procedures
cursor.procedures(schema="dbo")
# Get index statistics
cursor.statistics(table="Product", schema="Production")
# Get type information
cursor.getTypeInfo()
Vedi Scoperta dello schema per la documentazione completa.
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: settembre 2024
Nuove funzionalità
Convertitori di uscita personalizzati
Registrare funzioni personalizzate per trasformare i valori delle colonne durante il fetch:
import mssql_python
from decimal import Decimal
conn = mssql_python.connect(connection_string)
# Convert decimals to float (converter receives Decimal)
def decimal_to_float(value):
if value is None:
return None
return float(value) # value is already a Decimal object
conn.add_output_converter(mssql_python.SQL_DECIMAL, decimal_to_float)
# Custom money formatting
def format_money(value):
if value is None:
return "$0.00"
return f"${float(value):,.2f}" # value is already a Decimal object
conn.add_output_converter(mssql_python.SQL_DECIMAL, format_money)
Metodi di gestione:
add_output_converter(sql_type, converter_func)get_output_converter(sql_type)remove_output_converter(sql_type)clear_output_converters()
Per la documentazione completa, vedi Convertitori di tipo personalizzato.
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: luglio 2024
Versione iniziale GA
La prima versione di disponibilità generale di mssql-python, il driver Python nativo di Microsoft per SQL Server.
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(), ebatch_execute(). - Attributi di connessione attraverso
set_attr()egetinfo(). - Supporto per il gestore di contesto.
Caratteristiche del cursore
- Metodi standard di riporto:
fetchone(),fetchmany(),fetchall(). - Metodi estesi:
fetchval(),skip(). - Metodi di esecuzione:
execute()eexecutemany(). - 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 Python
None.
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 istruzioniEXECUTE. - 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
%se%dcon?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.