Was gibt es Neues in mssql-python

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() und cursor.close()) sowie in SQLDescribeParam für None-wertige Parameter in SSH-Tunnel- und In-Process-Forwarder-Setups wurde behoben.
  • Feste und BINARY NULL-Parameter VARBINARY in temporären Tabellen und Tabellenvariablen. Wenn die automatische Typauflösung fehlschlägt, sendet der Treiber nun eine Python-Warnung mit expliziter cursor.setinputsizes() Anweisung.
  • Fehler import mssql_python auf 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 Architektur arm64 als auch für die Architektur x86_64 umgeschrieben.
  • Ein GIL-Deadlock im Rust-Kern wurde behoben, der Massenkopiervorgänge beim Authentifizieren mit Authentication=ActiveDirectoryServicePrincipal zum 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 VARCHAR und CHAR im 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 simdutf immer statisch verknüpft.
  • Große DECIMAL Einfügungen in executemany() behoben.
  • Der falsche Typ-Fallback für NULL-Parameter wurde behoben.
  • Probleme beim Serialisieren und Deserialisieren von Ausnahmen behoben.
  • nextset() behoben, sodass PRINT-Nachrichten über mehrere Ergebnismengen hinweg beibehalten werden.
  • Behoben wurde die Verarbeitung von Row im executemany()-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 von RuntimeError ausgelö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 VARCHAR behoben.
  • cursor.bulkcopy()Fehler bei leeren Zeichenfolgen in den Spalten NVARCHAR(MAX) und VARCHAR(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() sowie SQL_DECIMAL- und SQL_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=False wurden 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ändiges pyarrow.TableErgebnis zurück.
  • cursor.arrow_batch() gibt eine einzelne pyarrow.RecordBatchzurück.
  • cursor.arrow_reader() gibt zum Streamen ein pyarrow.RecordBatchReader zurü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 VARBINARY Spalten (führt nicht mehr zu impliziten Umrechnungsfehlern).
  • Behoben wurde ein Problem, bei dem datetime.time-Werte bei Roundtrips in den Spalten TIME(1) bis TIME(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 None zurü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(), und batch_execute().
  • Verbindungsattribute durch set_attr() und getinfo().
  • Unterstützung für den Kontextmanager.

Cursor-Funktionen

  • Standard-Abrufmethoden: fetchone(), fetchmany(), fetchall().
  • Erweiterte Methoden: fetchval(), skip().
  • Ausführungsmethoden: execute() und executemany().
  • 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 stattdessen EXECUTE-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 %s und %d durch ? 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.