Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Jede Version des mssql-python-Treibers führt neue Funktionen, Leistungsverbesserungen und Fehlerbehebungen ein. Die folgenden Abschnitte beschreiben jede Version.
mssql-python 1.11.0
Veröffentlichungsdatum: Juli 2026
Enhancements
Verbesserte Kontextmanager-Semantik
with connection: schreibt Transaktionen jetzt bei regulärer Beendigung korrekt fest und rollt sie bei einer Ausnahme zurück, was dem Python-Stil mehr entspricht und das Verhalten vorhersehbarer macht.
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
Fehlerkorrekturen
- Ein GIL-Deadlock im ODBC-Teardown-Pfad (
conn.close()undcursor.close()) sowie inSQLDescribeParamfürNone-wertige Parameter in SSH-Tunnel- und In-Process-Forwarder-Setups wurde behoben. - Feste und
BINARYNULL-ParameterVARBINARYin temporären Tabellen und Tabellenvariablen. Wenn die automatische Typauflösung fehlschlägt, sendet der Treiber nun eine Python-Warnung mit explizitercursor.setinputsizes()Anweisung. - Fehler
import mssql_pythonauf Apple Silicon mit einer sauberen Installation behoben (Regression in Version 1.8.0). Die gebündelten ODBC-Dylib-Abhängigkeiten werden nun sowohl für die Architekturarm64als auch für die Architekturx86_64umgeschrieben. - Ein GIL-Deadlock im Rust-Kern wurde behoben, der Massenkopiervorgänge beim Authentifizieren mit
Authentication=ActiveDirectoryServicePrincipalzum Einfrieren brachte.
mssql-python 1.10.0
Veröffentlichungsdatum: Juni 2026
Enhancements
ActiveDirectoryServicePrincipal-Unterstützung für Massenkopien
cursor.bulkcopy() unterstützt nun Authentication=ActiveDirectoryServicePrincipal, ermöglicht Masseneinfügungen durch die Verwendung von Service Principal Credentials.
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")
Fehlerkorrekturen
- Probleme mit Nicht-ASCII-Daten in
VARCHARundCHARim Arrow-Fetch-Pfad wurden behoben. - Feste Verbindungszeitbegrenzungen während Großlasten.
mssql-python 1.9.0
Veröffentlichungsdatum: Juni 2026
Enhancements
Zeilenobjekte in Massenkopiervorgängen
cursor.bulkcopy() akzeptiert nun abgerufene Row-Objekte direkt, anstatt eine manuelle Tupelkonvertierung zu erfordern.
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")
Fehlerkorrekturen
- Die feste Radverpackung ist daher
simdutfimmer statisch verknüpft. - Große
DECIMALEinfügungen inexecutemany()behoben. - Der falsche Typ-Fallback für NULL-Parameter wurde behoben.
- Probleme beim Serialisieren und Deserialisieren von Ausnahmen behoben.
-
nextset()behoben, sodassPRINT-Nachrichten über mehrere Ergebnismengen hinweg beibehalten werden. - Behoben wurde die Verarbeitung von
Rowimexecutemany()-Fallback-Pfad bei der Datenausführung. - Feste Fetch-Methoden-Typprüfung für statische Analysetools.
mssql-python 1.8.0
Veröffentlichungsdatum: Mai 2026
Enhancements
ActiveDirectoryMSI-Unterstützung für Massenkopien
cursor.bulkcopy() unterstützt nun Authentication=ActiveDirectoryMSI systemzugeordnete und benutzerzugewiesene verwaltete Identitäten.
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")
Zeilenindizierung per String-Schlüssel
Sie können jetzt zusätzlich zur Positionsindizierung und zum Attributzugriff über den Spaltennamen, zum Beispiel row["col"], auf Zeilenwerte zugreifen.
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
Upgrade des mitgelieferten ODBC-Treibers
Der mitgelieferte Microsoft ODBC-Treiber für SQL Server wurde auf 18.6.2.1 aktualisiert.
Fehlerkorrekturen
- Behebung von aufgeschobenen Connect-Attribut-Lebensdauerproblemen bei tokenbasierter Authentifizierung.
- Das wiederholte Parsen der Verbindungszeichenfolge im Authentifizierungspfad wurde behoben.
- Feste
executemany()Annotationen für Sequenzeingaben.
mssql-python 1.7.1
Veröffentlichungsdatum: Mai 2026
Enhancements
Erweiterte Radabdeckung und Leistungsverbesserungen
Diese Version fügt RHEL 8-kompatible Räder hinzu, stellt macOS Python 3.10 universal2 Räder wieder her, verbessert die UTF-16-Handhabung durch simdutf, und optimiert den execute() heißen Pfad.
Leistungsauswirkungen: Der Batch-Durchsatz verbessert sich bei typischen Workloads um ~15% aufgrund von Hot-Path-Optimierungen in der Methode execute() .
Fehlerkorrekturen
- Login-Fehler wurden behoben, sodass nun
mssql_python-DB-API-Ausnahmen anstelle vonRuntimeErrorausgelöst werden. - Erweiterte GIL-Freigabe bei blockierenden ODBC-Ausführungs-, Abruf-, Transaktions- und Verbindungsattributaufrufen.
-
executemany()Ausfälle beim Vorzeichenwechsel von Dezimalwerten behoben. - Inkonsistente plattformübergreifende Dekodierung von CP1252
VARCHARbehoben. -
cursor.bulkcopy()Fehler bei leeren Zeichenfolgen in den SpaltenNVARCHAR(MAX)undVARCHAR(MAX)behoben.
Note
Version 1.7.0 wurde aufgrund von Veröffentlichungsproblemen zurückgezogen. Verwenden Sie Version 1.7.1 oder neuer.
mssql-python 1.6.0
Veröffentlichungsdatum: April 2026
Enhancements
Parserbasierte Bereinigung von Verbindungszeichenfolgen
Diese Verbesserung stellt sicher, dass Sonderzeichen in Passwortfeldern und Werten in geschweiften Klammern korrekt geparst werden.
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"
)
Die Sanierung von Connection string wechselte von regex-basierter Logik zu parserbasierter Verarbeitung, um die ODBC-Verbindungszeichenfolge-Syntax korrekt zu handhaben.
Fehlerkorrekturen
- GIL-Freigabe beim Blockieren von ODBC-Verbindungs- und -Trennvorgängen wurde behoben.
- Abstürze mit
setinputsizes()sowieSQL_DECIMAL- undSQL_NUMERIC-Hinweisen behoben. - Das falsche Verhalten von
fetchone()für ODBC-Katalogmethoden wurde behoben. - Fehler aufgrund eines ungültigen Cursorzustands bei Verwendung von
reset_cursor=Falsewurden behoben. - Feste
executemany()Hinweise für abbildungsbasierte Parametersequenzen. - Für
setup_logging(log_file_path=...)wurde ein Schutz vor Pfaddurchquerung hinzugefügt.
mssql-python 1.5.0
Veröffentlichungsdatum: April 2026
Neue Funktionen
Apache Arrow-Abrufunterstützung
Drei neue Cursor-Methoden ermöglichen den hochleistungsfähigen Abruf von Spaltendaten über das Arrow C Data Interface:
-
cursor.arrow()gibt ein vollständigespyarrow.TableErgebnis zurück. -
cursor.arrow_batch()gibt eine einzelnepyarrow.RecordBatchzurück. -
cursor.arrow_reader()gibt zum Streamen einpyarrow.RecordBatchReaderzurück.
Die Implementierung umgeht die Erstellung von Python-Objekten im heißen Pfad für eine bessere Leistung. Für vollständige Dokumentation siehe Apache Arrow Integration.
Unterstützung für den Typ sql_variant
Der Treiber erkennt sql_variant nun Spalten beim Abruf, löst ihren zugrundeliegenden Basistyp auf und liefert korrekt typisierte Python-Werte statt Rohbytes.
Note
sql_variant Spalten verwenden einen Streaming-Abrufpfad, was im Vergleich zu Spalten mit festem Datentyp zu leichten Leistungseinbußen führen kann.
Native UUID-Unterstützung
Eine neue native_uuid Einstellung steuert, ob UNIQUEIDENTIFIER Spalten als Objekte (Standard) oder als uuid.UUID pyodbc-kompatible Großbuchstaben-Zeichenketten zurückgegeben werden. Konfigurieren Sie es auf Modulebene oder pro Verbindung:
# 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)
Weitere Informationen finden Sie unter Modulkonfiguration.
Reihenklasse Öffentlicher Export
Die Klasse Row wird nun auf der obersten Ebene für Typannotationen exportiert:
from mssql_python import Row
Fehlerkorrekturen
- Falsch-Positiv-Erkennung
?innerhalb von Klammern-Identifikatoren, String-Literals und Kommentaren wurde behoben. - Fixierte NULL-Parameterbindung für
VARBINARYSpalten (führt nicht mehr zu impliziten Umrechnungsfehlern). - Behoben wurde ein Problem, bei dem
datetime.time-Werte bei Roundtrips in den SpaltenTIME(1)bisTIME(7)Mikrosekunden verloren. - Der Arrow-Abrufpfad wurde korrigiert, sodass Sekundenbruchteile für
TIME-Spalten korrekt berücksichtigt werden. - Behobene Massenkopie mit Microsoft Entra ID-Authentifizierungsmethoden (veraltete Zugangsdaten verursachen keine Validierungsfehler mehr).
- Zwischengespeicherte Azure Identity-Credential-Instanzen auf Modulebene für eine verbesserte Authentifizierungsleistung.
mssql-python 1.4.0
Veröffentlichungsdatum: März 2025
Neue Funktionen
Unterstützung für Massenkopien
Leistungsstarkes Laden von Massendaten ist jetzt über cursor.bulkcopy() verfügbar:
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")
Die Methode akzeptiert Optionen für batch_size, timeout, column_mappings, keep_identity, check_constraints, table_lock, keep_nulls, fire_triggers und use_internal_transaction.
Siehe Massenkopieren für die vollständige Dokumentation.
Improvements
- Leistungsoptimierungen für große Ergebnismengen.
- Reduzierter Speicherverbrauch während Batch-Operationen.
- Verbesserte Fehlermeldungen bei Massen-Kopierfehlern.
mssql-python 1.3.0
Veröffentlichungsdatum: Januar 2025
Neue Funktionen
Klasse „Einstellungen“
Modulweites Verhalten über die neue Settings Klasse konfigurieren:
import mssql_python
settings = mssql_python.get_settings()
settings.lowercase = True # Lowercase column names in cursor.description
Details finden Sie unter Modulkonfiguration .
Improvements
- Besserer Umgang mit Verbindungszeitbegrenzungen während eines Azure SQL-Failovers.
- Verbesserte Kompatibilität mit Python 3.13.
mssql-python 1.2.0
Veröffentlichungsdatum: November 2024
Neue Funktionen
Methoden zur Schema-Entdeckung
Neue Cursormethoden zur Erforschung von Datenbankmetadaten:
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()
Siehe Schema-Entdeckung für vollständige Dokumentation.
Improvements
- Verbessertes Metadaten-Caching für wiederholte Schema-Abfragen.
- Bessere Handhabung berechneter Spalten bei
columns()-Ergebnissen.
mssql-python 1.1.0
Veröffentlichungsdatum: September 2024
Neue Funktionen
Benutzerdefinierte Ausgabekonverter
Registrieren Sie benutzerdefinierte Funktionen, um Spaltenwerte während des Abrufs zu transformieren:
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)
Managementmethoden:
add_output_converter(sql_type, converter_func)get_output_converter(sql_type)remove_output_converter(sql_type)clear_output_converters()
Die vollständige Dokumentation finden Sie unter Benutzerdefinierte Typkonverter.
Improvements
- Bessere Fehlermeldungen bei Fehlschlägen der Typkonvertierung.
- Unterstützung für Konverterfunktionen, die
Nonezurückgeben.
mssql-python 1.0.0
Veröffentlichungsdatum: Juli 2024
Erste GA-Veröffentlichung
Die erste allgemeine Verfügbarkeitsversion von mssql-python, dem nativen Python-Treiber von Microsoft für SQL Server.
Wichtige Funktionen
- DDBC-Architektur: Direkte Datenbankverbindung ohne Installation eines ODBC-Treibers.
- DB-API 2.0-Konformität: Standard-Python-Datenbankschnittstelle.
- Connection Pooling: Eingebautes Connection Pool-Management.
- Microsoft Entra-Authentifizierung: Volle Unterstützung für Azure-Identitätsbasierte Authentifizierung.
- TLS-Verschlüsselung: Sichere Verbindungen mit Zertifikatsvalidierung.
Verbindungsmerkmale
- 21 Verbindungszeichenfolge-Schlüsselwörter.
- 9 Authentifizierungsmodi (SQL, Windows und 7 Microsoft Entra ID-Methoden).
- Autocommit-Steuerung.
- Ausführungsmethoden:
execute(),executemany(), undbatch_execute(). - Verbindungsattribute durch
set_attr()undgetinfo(). - Unterstützung für den Kontextmanager.
Cursor-Funktionen
- Standard-Abrufmethoden:
fetchone(),fetchmany(),fetchall(). - Erweiterte Methoden:
fetchval(),skip(). - Ausführungsmethoden:
execute()undexecutemany(). - Zeilenobjekte mit Attribut- und Indexzugriff.
- Mehrfach-Ergebnis-Set-Navigation mit
nextset().
Datentypunterstützung
- Alle SQL Server-nativen Typen.
- Python↔SQL-Typzuordnungen.
- SQL-Typkonstanten für explizite Typisierung (zum Beispiel
mssql_python.SQL_DECIMAL). - NULL-Handling in Python
None.
Transaktionsunterstützung
- Manuelles Commit und Rollback.
- Autocommit-Modus.
- Steuerung der Isolationsstufe.
- Deadlock-Erkennung und -handhabung.
Authentifizierungsmodi
| Modus | Beschreibung |
|---|---|
| SQL Server Authentifizierung | Benutzername und Kennwort |
| Windows-Authentifizierung | Trusted_Connection |
| ActiveDirectoryDefault | DefaultAzureCredential |
| ActiveDirectoryInteractive | Browserbasierte Anmeldung |
| ActiveDirectoryDeviceCode | Gerätecodefluss |
| ActiveDirectoryPassword | Microsoft Entra Benutzername und Passwort (veraltet; verwendet ROPC) |
| ActiveDirectoryMSI | Verwaltete Identität |
| ActiveDirectoryServicePrincipal | Service Principal |
| ActiveDirectoryIntegrated | Windows Kerberos |
Upgrade
Von pyodbc
Für detaillierte Migrationshinweise siehe Migration von pyodbc.
Wichtige Unterschiede:
- Sowohl
?(qmark) als auch%(name)s(pyformat) Parameterstile werden unterstützt. Deine bestehenden?Abfragen funktionieren ohne Änderungen. - Keine
callproc()Methode. Verwenden Sie stattdessenEXECUTE-Anweisungen. - Integrierte Verbindungspoolverwaltung.
- Keine externe ODBC-Treiberabhängigkeit.
Aus pymssql
Für detaillierte Migrationsratschläge siehe Migrate from pymssql.
Wichtige Unterschiede:
- Ersetzen Sie die Parametermarkierungen
%sund%ddurch?oder%(name)s. - Verwenden Sie einen Verbindungszeichenfolge anstelle von Positionsargumenten.
- Keine FreeTDS-Abhängigkeit.
- Mehrere gleichzeitige Cursor pro Verbindung.
- Zeilenobjekte mit Attributzugriff ersetzen
as_dict=True.
Zwischen mssql-python-Versionen
Rüste den Treiber auf, um neue Funktionen und Verbesserungen zu erhalten.
pip install --upgrade mssql-python
Prüfen Sie vor der Aktualisierung von Produktivsystemen die Release Notes auf mögliche inkompatible Änderungen.
Roadmap
Für kommende Funktionen und die Entwicklungsroadmap siehe das GitHub-Repository.