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.12.0

Veröffentlichungsdatum: Juli 2026

Enhancements

Eigenständiges mssql-python-odbc Begleitpaket

Die ODBC-Treiber-Binären, die mssql-python zur Laufzeit benötigt werden, werden nun auch als separates, nur datenbasiertes Begleitpaket veröffentlicht: mssql-python-odbc (Importname mssql_python_odbc, derzeit an Version 18.6.2gepinnt). Das Paket mssql-python deklariert mssql-python-odbc==18.6.2 in install_requires, sodass pip install mssql-python das Begleitpaket transparent zusammen mit diesem installiert. Es sind keine Codeänderungen erforderlich.

Der native Loader bevorzugt das externe mssql_python_odbc Paket, wenn es vorhanden ist, und greift auf die ODBC-Binärdateien zurück, die noch im mssql-python Rad gebündelt sind, wenn es nicht vorhanden ist. Der Fallback ist in Verbindung mit dem Python Global Interpreter Lock (GIL) sicher und funktioniert auf musl-basierten Linux-Distributionen wie Alpine.

Diese Aufteilung ermöglicht es, die Treiber-Binärdateien unabhängig vom Python-Code zu pinnen oder zu aktualisieren, gibt Redistributoren im Laufe der Zeit ein kleineres mssql-python Rad und vermeidet doppelte Eigentumsprobleme durch gebündelte ODBC-Dateien.

Important

Diese Aufteilung wird ohne inkompatible Änderung ausgeliefert. In einer zukünftigen Hauptversion (v2.0.0) könnte der gebündelte libs/-Baum entfernt werden; in diesem Fall wird mssql-python-odbc zu einer zwingenden Voraussetzung zur Laufzeit.

Fehlerkorrekturen

cursor.bulkcopy() verwendet jetzt das Verbindungszeitlimit der übergeordneten Verbindung

Die Massenkopie-Operation öffnet eine separate Verbindung über die native Erweiterung mssql_py_core . Früher wurde bei dieser Operation immer ein fest programmiertes 15-Sekunden-Verbindungs-Timeout verwendet, ohne Möglichkeit, es in Python zu überschreiben. Wenn Sie für die übergeordnete Verbindung (connect(..., timeout=<seconds>)) ein Zeitlimit für den Verbindungsaufbau festlegen, gibt bulkcopy() diesen Wert jetzt an die interne Verbindung weiter. Die Einstellung timeout=0 bewahrt das No-Override-Verhalten und behält die interne 15-Sekunden-Standardeinstellung bei. Der Timeout des Cursors zum Zeitpunkt des bulkcopy()-Aufrufs wird für den Vorgang verwendet, sodass spätere Änderungen an der übergeordneten Verbindung einen laufenden Bulk Copy-Vorgang nicht beeinflussen.

Das folgende Beispiel verwendet die Production.Culture Nachschlagetabelle aus der AdventureWorks-Beispieldatenbank . Passen Sie die Verbindungszeichenfolge und den Datenbanknamen für Ihre Umgebung an:

import mssql_python
from datetime import datetime

# The 60-second timeout applies to both the initial connection and
# the internal connection that bulkcopy() opens.
conn = mssql_python.connect(
    "Server=<server>;"
    "Database=AdventureWorks2022;"
    "Encrypt=yes",
    timeout=60,
)
conn.autocommit = True
cursor = conn.cursor()

# Bulk-copy two rows into Production.Culture (CultureID, Name, ModifiedDate).
now = datetime.now()
rows = [
    ("xx", "Demo culture 1", now),
    ("yy", "Demo culture 2", now),
]
result = cursor.bulkcopy("Production.Culture", rows)
print(f"Copied {result['rows_copied']} rows")

# Remove the demo rows so the sample is re-runnable.
cursor.execute("DELETE FROM Production.Culture WHERE CultureID IN ('xx','yy')")

cursor.bulkcopy() unterstützt CLR-benutzerdefinierte Typspalten

Zuvor schlug cursor.bulkcopy() bei jeder Zielspalte mit Protocol Error: Unsupported TDS type for bulk copy: 0xF0 fehl, die einen benutzerdefinierten Typ der Common Language Runtime (CLR) verwendete, einschließlich der integrierten Typen geography, geometry und hierarchyid sowie jedes benutzerdefinierten, in einer Assembly registrierten CLR-UDT. Der native mssql_py_core Wire-Pfad hatte keinen Handler für das UDT-Typ-Token (0xF0) und zeigte Fehler beim Schreiben von Spaltenmetadaten, bevor irgendwelche Zeilen gesendet wurden. CLR-UDT-Spalten werden nun bei der Übertragung varbinary(max) zugeordnet, und die bereitgestellten Bytes werden als Nutzlast des UDT IBinarySerialize gestreamt, entsprechend der Art und Weise, wie pyodbc und python-tds UDT-Spalten laden. SQL Server materialisiert den benutzerdefinierten Datentyp (UDT) beim Einfügen. Geliefert über den mssql_py_core 0.1.6 bis 0.1.7 Bump.

Das folgende Beispiel archiviert die Organigrammspalte aus HumanResources.Employee (einer Hierarchie-Spalte, einer der integrierten CLR-UDTs von SQL Server) in eine neue Tabelle. In einem echten Workflow könnten die UDT-Bytes von einer anderen SQL Server-Instanz, aus einer serialisierten Datei oder aus der Ausgabe Ihres CLR-Typs über IBinarySerialize.Write() stammen; dieses Beispiel liest sie über CAST(... AS varbinary(max)) aus einer vorhandenen Spalte, sodass das Beispiel in sich geschlossen ist. Die Massenkopie enthält die Zeile, deren OrganizationNode NULL ist:

import mssql_python

conn = mssql_python.connect(
    "Server=<server>;"
    "Database=AdventureWorks2022;"
    "Encrypt=yes",
)
conn.autocommit = True  # bulkcopy uses a separate connection; the destination must be visible
cursor = conn.cursor()

cursor.execute(
    "IF OBJECT_ID('dbo.EmployeeOrgArchive','U') IS NOT NULL "
    "DROP TABLE dbo.EmployeeOrgArchive;"
    "CREATE TABLE dbo.EmployeeOrgArchive (BusinessEntityID int, OrganizationNode hierarchyid);"
)

# Casting a hierarchyid column to varbinary(max) yields the UDT's
# serialized IBinarySerialize payload.
cursor.execute(
    "SELECT BusinessEntityID, CAST(OrganizationNode AS varbinary(max)) "
    "FROM HumanResources.Employee;"
)
rows = cursor.fetchall()

# Stream the (id, bytes) tuples into the destination's hierarchyid column.
result = cursor.bulkcopy("dbo.EmployeeOrgArchive", rows)
print(f"Copied {result['rows_copied']} rows")

cursor.execute("DROP TABLE dbo.EmployeeOrgArchive")

Für einen benutzerdefinierten, in einer Assembly registrierten CLR-UDT verwenden Sie den Typ in der Zieltabelle, und geben Sie die von der Methode IBinarySerialize.Write() des Typs erzeugten Bytes an.

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.