Wat is er nieuw in mssql-python

Elke release van de mssql-python-driver introduceert nieuwe functies, prestatieverbeteringen en bugfixes. De volgende secties beschrijven elke versie.

mssql-python 1.11.0

Releasedatum: juli 2026

Enhancements

Verbeterde contextmanager-semantiek

with connection: bevestigt transacties nu correct bij een normale afsluiting en draait ze terug als er een uitzondering optreedt, waardoor het gedrag meer in lijn is met Python en voorspelbaarder wordt.

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

Fouten opgelost

  • Een GIL-deadlock in het ODBC-afbouwpad (conn.close() en cursor.close()) en in SQLDescribeParam voor parameters met de waarde None in SSH-tunnel- en in-process-forwarderconfiguraties opgelost.
  • Vaste BINARY en VARBINARY NULL-parameters in tijdelijke tabellen en tabelvariabelen. Wanneer automatische typeresolutie faalt, geeft de driver nu een Python-waarschuwing met expliciete cursor.setinputsizes() richtlijnen.
  • Probleem opgelost waarbij import mssql_python faalde op Apple Silicon bij een schone installatie (regressie in 1.8.0). De gebundelde ODBC dylib-afhankelijkheden zijn nu herschreven voor zowel arm64 en x86_64 architecturen.
  • Er is een GIL-deadlock in de Rust-kern opgelost waardoor bulkkopieën vastliepen bij authenticatie met Authentication=ActiveDirectoryServicePrincipal.

mssql-python 1.10.0

Releasedatum: juni 2026

Enhancements

ActiveDirectoryServicePrincipal-ondersteuning voor bulkkopieën

cursor.bulkcopy() ondersteunt nu Authentication=ActiveDirectoryServicePrincipal, waardoor bulkinserts mogelijk zijn door gebruik te maken van 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")

Fouten opgelost

  • Problemen met niet-ASCII-gegevens in het Arrow-ophaalpad voor VARCHAR en CHAR zijn opgelost.
  • Vaste verbindingstime-outs tijdens bulkbelasting.

mssql-python 1.9.0

Releasedatum: juni 2026

Enhancements

Rijobjecten bulkkopiëren

cursor.bulkcopy() accepteert nu direct gehaalde Row objecten in plaats van handmatige tuple-conversie te vereisen.

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")

Fouten opgelost

  • Vaste wielverpakking, dus simdutf altijd statisch gekoppeld.
  • Grote inserts opgelost in executemany().
  • Onjuiste typefallback voor NULL-parameters opgelost.
  • Vaste uitzonderingen voor pickle en unpickle retourritten.
  • Probleem opgelost in nextset(), zodat PRINT-berichten tussen resultaatsets heen behouden blijven.
  • Probleem met de afhandeling van Row opgelost in het fallback-pad voor executemany() data-at-execution.
  • Vaste typecontrole van de fetch-methode voor statische analysetools.

mssql-python 1.8.0

Releasedatum: mei 2026

Enhancements

ActiveDirectoryMSI-ondersteuning voor bulkkopieën

cursor.bulkcopy() ondersteunt nu Authentication=ActiveDirectoryMSI voor door het systeem toegewezen en door de gebruiker toegewezen beheerde identiteiten.

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")

Rijindexering met tekenreekssleutel

Je kunt nu rijwaarden bijvoorbeeld op kolomnaam row["col"]benaderen , naast positionele indexering en attribuuttoegang.

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 van de meegeleverde ODBC-driver

De meegeleverde Microsoft ODBC-driver voor SQL Server werd bijgewerkt naar 18.6.2.1.

Fouten opgelost

  • Problemen met de levensduur van het uitgestelde verbindingsattribuut in tokengebaseerde authenticatie opgelost.
  • Herhaald parseren van verbindingsreeksen in het authenticatiepad is opgelost.
  • Vaste executemany() type annotaties voor sequentie-invoer.

mssql-python 1.7.1

Releasedatum: mei 2026

Enhancements

Uitgebreide wieldekking en prestatieverbeteringen

Deze release voegt RHEL 8-compatibele wielen toe, herstelt macOS Python 3.10 universal2 wielen, verbetert de UTF-16 handling via simdutf, en optimaliseert het execute() hot path.

Prestatie-impact: De batchuitvoeringsdoorvoer verbetert met ~15% op typische workloads door hot path-optimalisaties in de execute() methode.

Fouten opgelost

  • Fouten bij het aanmelden opgelost, zodat deze mssql_python DB-API-uitzonderingen genereren in plaats van RuntimeError.
  • Verlengde GIL-release over het blokkeren van ODBC-uitvoering, fetch, transactie en verbindingsattribuutaanroepen.
  • Problemen met executemany() opgelost wanneer decimale waarden van teken veranderen.
  • Inconsistente decodering van CP1252 VARCHAR op verschillende platforms opgelost.
  • cursor.bulkcopy()-fouten voor lege tekenreeksen in kolommen NVARCHAR(MAX) en VARCHAR(MAX) opgelost.

Opmerking

Versie 1.7.0 werd ingetrokken vanwege publicatieproblemen. Gebruik versie 1.7.1 of later.

mssql-python 1.6.0

Releasedatum: april 2026

Enhancements

Op parser gebaseerde opschoning van verbindingsreeksen

Deze verbetering zorgt voor correcte parsing van speciale tekens in wachtwoordvelden en versterkte waarden.

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"
)

Connection string sanitization is overgestapt van regex-gebaseerde logica naar parser-gebaseerde verwerking voor correcte afhandeling van ODBC-verbindingsreeks-syntaxis.

Fouten opgelost

  • GIL-release gerepareerd tijdens het blokkeren van ODBC-verbindingen en -ontkoppelingen.
  • Crashproblemen met setinputsizes() en SQL_DECIMAL hints SQL_NUMERIC opgelost.
  • Onjuist fetchone() gedrag voor ODBC-catalogusmethoden is gecorrigeerd.
  • Fouten met een ongeldige cursorstatus opgelost wanneer reset_cursor=False wordt gebruikt.
  • Vaste executemany() type hints voor mapping-gebaseerde parameterreeksen.
  • Een paddoorloopbeveiliging toegevoegd voor setup_logging(log_file_path=...).

mssql-python 1.5.0

Releasedatum: april 2026

Nieuwe functies

Ondersteuning voor het ophalen van Apache Arrow

Drie nieuwe cursormethoden bieden hoogpresterende kolomgegevensopvraging via de Arrow C Data Interface:

  • cursor.arrow() geeft een volledige pyarrow.Table terug.
  • cursor.arrow_batch() geeft een enkele pyarrow.RecordBatchterug.
  • cursor.arrow_reader() geeft een pyarrow.RecordBatchReader terug voor streaming.

De implementatie omzeilt het aanmaken van Python-objecten in het hot path voor betere prestaties. Voor volledige documentatie, zie Apache Arrow-integratie.

ondersteuning voor het type sql_variant

De driver detecteert sql_variant nu kolommen tijdens het ophalen, lost hun onderliggende basistype op en levert correct getypte Python-waarden terug in plaats van ruwe bytes.

Opmerking

sql_variant kolommen gebruiken een streaming-ophaalpad, wat de prestaties enigszins kan beïnvloeden in vergelijking met kolommen met een vast type.

Ingebouwde UUID-ondersteuning

Een nieuwe native_uuid instelling bepaalt of UNIQUEIDENTIFIER kolommen worden teruggegeven als uuid.UUID objecten (standaard) of als pyodbc-compatibele hoofdletterstrings. Configureer het op moduleniveau of per verbinding:

# 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)

Voor meer informatie, zie Moduleconfiguratie.

Rijklasse openbare export

De Row klasse wordt nu op het hoogste niveau geëxporteerd voor type-annotaties:

from mssql_python import Row

Fouten opgelost

  • Opgelost: onjuiste detectie van ? binnen tussen vierkante haken geplaatste identifiers, stringliteralen en commentaar.
  • Vaste NULL-parameterbinding voor VARBINARY kolommen (veroorzaakt geen impliciete conversiefouten meer).
  • Vaste datetime.time waarden waarbij microseconden verloren gaan bij retouren voor TIME(1) doorgaande TIME(7) kolommen.
  • Ophaalpad voor Arrow gecorrigeerd zodat fracties van seconden correct worden opgenomen voor TIME-kolommen.
  • Opgeloste bulkkopie met Microsoft Entra ID-authenticatiemethoden (verouderde inloggegevens veroorzaken geen validatiefouten meer).
  • Azure Identity-credential-instanties op moduleniveau gecachet voor verbeterde authenticatieprestaties.

mssql-python 1.4.0

Releasedatum: maart 2025

Nieuwe functies

Ondersteuning voor bulkkopieën

Snel bulkladen van gegevens is nu beschikbaar via 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")

De methode accepteert opties voor batch_size, timeout, , column_mappings, keep_identity, check_constraints, table_lockkeep_nulls, , fire_triggers, en use_internal_transaction.

Zie Bulk copy voor volledige documentatie.

Improvements

  • Prestatieoptimalisaties voor grote resultatensets.
  • Verminderd geheugengebruik tijdens batchbewerkingen.
  • Verbeterde foutmeldingen voor mislukte bulk-kopieeracties.

mssql-python 1.3.0

Releasedatum: januari 2025

Nieuwe functies

Settings-klasse

Configureer module-breed gedrag via de nieuwe Settings klasse:

import mssql_python

settings = mssql_python.get_settings()
settings.lowercase = True       # Lowercase column names in cursor.description

Zie Moduleconfiguratie voor details.

Improvements

  • Betere afhandeling van verbindingstimeout tijdens Azure SQL failover.
  • Verbeterde compatibiliteit met Python 3.13.

mssql-python 1.2.0

Releasedatum: november 2024

Nieuwe functies

Methoden voor schema-ontdekking

Nieuwe cursormethoden voor het verkennen van metadata in databases:

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()

Zie Schema-ontdekking voor volledige documentatie.

Improvements

  • Verbeterde metadata-caching voor herhaalde schema-query's.
  • Betere verwerking van berekende kolommen in columns()-resultaten.

mssql-python 1.1.0

Releasedatum: september 2024

Nieuwe functies

Aangepaste uitgangsomzetters

Registreer aangepaste functies om kolomwaarden te transformeren tijdens het ophalen:

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)

Beheermethoden:

  • add_output_converter(sql_type, converter_func)
  • get_output_converter(sql_type)
  • remove_output_converter(sql_type)
  • clear_output_converters()

Voor volledige documentatie, zie Custom type converters.

Improvements

  • Betere foutmeldingen voor mislukte typeconversies.
  • Ondersteuning voor converterfuncties die None retourneren.

mssql-python 1.0.0

Releasedatum: juli 2024

Eerste GA-release

De eerste algemene beschikbaarheidsrelease van mssql-python, Microsoft's native Python-driver voor SQL Server.

Kernfuncties

  • DDBC-architectuur: Directe databaseconnectiviteit zonder ODBC-driverinstallatie te vereisen.
  • DB-API 2.0-conformiteit: Standaard Python database-interface.
  • Verbindingspooling: Ingebouwd beheer van de verbindingspool.
  • Microsoft Entra-authenticatie: Volledige ondersteuning voor Azure-identiteitsgebaseerde authenticatie.
  • TLS-encryptie: Beveiligde verbindingen met certificaatvalidatie.

Verbindingsmogelijkheden

  • 21 verbindingsreeks-zoekwoorden.
  • 9 authenticatiemodi (SQL, Windows en 7 Microsoft Entra ID-methoden).
  • Autocommitbeheer.
  • Uitvoeringsmethoden: execute(), executemany(), en batch_execute().
  • Verbindingsattributen via set_attr() en getinfo().
  • Ondersteuning voor contextmanagers.

Cursorkenmerken

  • Standaard fetchmethoden: fetchone(), fetchmany(), . fetchall()
  • Uitgebreide methoden: fetchval(), skip().
  • Uitvoeringsmethoden: execute() en executemany().
  • Rijobjecten met attribuut- en indextoegang.
  • Navigatie met meerdere resultaatsets met nextset().

Ondersteuning voor gegevenstypen

  • Alle systeemeigen typen van SQL Server.
  • Python↔SQL-typetoewijzingen.
  • SQL-typeconstanten voor expliciete typering (bijvoorbeeld, mssql_python.SQL_DECIMAL).
  • NULL-afhandeling als PythonNone.

Transactieondersteuning

  • Handmatig vastleggen en terugdraaien.
  • Autocommit-modus.
  • Isolatieniveaucontrole.
  • Deadlock-detectie en -hantering.

Verificatiemodi

Mode Beschrijving
SQL Server-authenticatie Gebruikersnaam en wachtwoord
Windows authentication Trusted_Connection
ActiveDirectoryDefault DefaultAzureCredential
ActiveDirectoryInteractive Browsergebaseerde aanmelding
ActiveDirectoryDeviceCode Apparaatcodestroomproces
ActiveDirectoryPassword Microsoft Entra gebruikersnaam en wachtwoord (verouderd; gebruikt ROPC)
ActiveDirectoryMSI Beheerde identiteit
ActiveDirectoryServicePrincipal Service Principal
ActiveDirectoryIntegrated Windows Kerberos

Upgrade

Afkomstig van pyodbc

Voor gedetailleerde migratierichtlijnen, zie Migreren van pyodbc.

Belangrijkste verschillen:

  • Zowel ? (qmark) als %(name)s (pyformat) parameterstijlen worden ondersteund. Je bestaande ? queries werken zonder wijzigingen.
  • Geen methode callproc() . Gebruik EXECUTE in plaats daarvan statements.
  • Ingebouwde verbindingspooling.
  • Geen externe ODBC-driverafhankelijkheid.

Uit pymssql

Voor gedetailleerde migratierichtlijnen, zie Migreren van pymssql.

Belangrijkste verschillen:

  • Vervang de parameteraanduidingen %s en %d door ? of %(name)s.
  • Gebruik een verbindingsreeks in plaats van positionele argumenten.
  • Geen FreeTDS-afhankelijkheid.
  • Meerdere gelijktijdige cursors per verbinding.
  • Rijobjecten met attribuuttoegang vervangen as_dict=True.

Tussen versies van mssql-python

Upgrade de driver om nieuwe functies en oplossingen te krijgen.

pip install --upgrade mssql-python

Bekijk de release notes op eventuele breaking changes voordat je de productiesystemen upgradet.

Roadmap

Voor aankomende functies en de ontwikkelingsroute, zie de GitHub-repository.