Vad är nytt i mssql-python

Varje version av mssql-python-drivrutinen introducerar nya funktioner, prestandaförbättringar och buggfixar. Följande avsnitt beskriver varje version.

mssql-python 1.11.0

Releasedatum: juli 2026

Enhancements

Förbättrad semantik för kontexthanterare

with connection: bekräftar nu korrekt transaktioner vid korrekt avslut och rullar tillbaka dem vid undantag, vilket gör det mer Pythoniskt och förutsägbart.

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

Felkorrigeringar

  • Åtgärdade en GIL-deadlock i ODBC:s avvecklingsväg (conn.close() och cursor.close()) och i SQLDescribeParam för parametrar med värdet None i konfigurationer med SSH-tunnel och vidarebefordrare i processen.
  • Fasta BINARY och VARBINARY NULL-parametrar i temporära tabeller och tabellvariabler. När automatisk typupplösning misslyckas genererar drivrutinen nu en varning i Python med tydlig cursor.setinputsizes() vägledning.
  • Fixade import mssql_python fel på Apple Silicon med en ren installation (regression i 1.8.0). De medföljande ODBC-dylib-beroendena har nu skrivits om för både arm64- och x86_64-arkitekturer.
  • Åtgärdade en GIL-deadlock i Rust-kärnan som gjorde att bulkkopieringsåtgärder låste sig vid autentisering med Authentication=ActiveDirectoryServicePrincipal.

mssql-python 1.10.0

Utgivningsdatum: juni 2026

Enhancements

ActiveDirectoryServicePrincipal-stöd för masskopiering

cursor.bulkcopy() stöder nu Authentication=ActiveDirectoryServicePrincipal, vilket möjliggör massinfogningar med autentiseringsuppgifter för tjänstens huvudnamn.

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

Felkorrigeringar

  • Åtgärdade data som inte är i ASCII-format för VARCHAR och CHAR i Arrow-hämtningssökvägen.
  • Fasta anslutningstidsavbrott under bulklast.

mssql-python 1.9.0

Utgivningsdatum: juni 2026

Enhancements

Radobjekt i bulk-kopiering

cursor.bulkcopy() accepterar nu hämtade Row objekt direkt istället för att kräva manuell tuplekonvertering.

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

Felkorrigeringar

  • Fast hjulpaketering så simdutf det är alltid statiskt kopplat.
  • Åtgärdade stora DECIMAL infogningar i executemany().
  • Fixade felaktig typ av fallback för NULL-parametrar.
  • Fixade undantag för pickle och av-pickle tur-och-retur.
  • Åtgärdat nextset() så att det behåller PRINT meddelanden mellan resultatuppsättningar.
  • Åtgärdade hanteringen av Row i reservvägen för data-at-execution i executemany().
  • Åtgärdade typkontrollen för fetch-metoden för statiska analysverktyg.

mssql-python 1.8.0

Utgivningsdatum: maj 2026

Enhancements

ActiveDirectoryMSI-stöd för masskopiering

cursor.bulkcopy() stöder Authentication=ActiveDirectoryMSI nu systemtilldelade och användartilldelade hanterade identiteter.

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

Indexering med strängnyckel för rad

Du kan nu komma åt radvärden efter kolumnnamn, till exempel row["col"], utöver positionsindexering och attributåtkomst.

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

Medföljande ODBC-drivrutinsuppgradering

Den medföljande Microsoft ODBC-drivrutinen för SQL Server uppdaterades till 18.6.2.1.

Felkorrigeringar

  • Åtgärdade problem med livslängden för fördröjda connect-attribut i tokenbaserad autentisering.
  • Åtgärdade upprepad tolkning av anslutningssträngen i autentiseringsflödet.
  • Fasta executemany() typannoteringar för sekvensindata.

mssql-python 1.7.1

Utgivningsdatum: maj 2026

Enhancements

Utökad hjultäckning och prestandaförbättringar

Denna version lägger till RHEL 8-kompatibla hjul, återställer macOS Python 3.10-hjuluniversal2, förbättrar UTF-16-hanteringen genom simdutf, och optimerar execute() hot path.

Prestandapåverkan: Batch-exekveringsgenomströmningen förbättras med ~15% på typiska arbetsbelastningar tack vare hot path-optimeringar i metoden execute() .

Felkorrigeringar

  • Åtgärdade inloggningsfel så att de utlöser mssql_python DB-API-undantag i stället för RuntimeError.
  • Utökad GIL-frigivning vid blockerande ODBC-anrop för körning, hämtning, transaktioner och anslutningsattribut.
  • Åtgärdade fel med executemany() när decimalvärden byter tecken.
  • Åtgärdade inkonsekvent avkodning av CP1252 VARCHAR mellan plattformar.
  • Åtgärdade cursor.bulkcopy() fel för tomma strängar i NVARCHAR(MAX) och VARCHAR(MAX) kolumner.

Note

Version 1.7.0 drogs tillbaka på grund av publiceringsproblem. Använd version 1.7.1 eller senare.

mssql-python 1.6.0

Utgivningsdatum: april 2026

Enhancements

Parserbaserad rensning av anslutningssträng

Denna förbättring säkerställer korrekt tolkning av specialtecken i lösenordsfält och förstärkta värden.

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

Rensning av anslutningssträngar flyttades från regex-baserad logik till parser-baserad bearbetning för korrekt hantering av ODBC-anslutningssträngssyntax.

Felkorrigeringar

  • Åtgärdade GIL-frigörelse vid blockerande ODBC-anslutnings- och frånkopplingsåtgärder.
  • Fixade setinputsizes() krascher med SQL_DECIMAL och SQL_NUMERIC ledtrådar.
  • Korrigerade felaktigt fetchone() beteende för ODBC-katalogmetoder.
  • Åtgärdade fel med ogiltigt markörtillstånd när reset_cursor=False användes.
  • Fasta executemany() typ-ledtrådar för mappningsbaserade parametersekvenser.
  • La till ett skydd mot sökvägstraversering för setup_logging(log_file_path=...).

mssql-python 1.5.0

Utgivningsdatum: april 2026

Nya funktioner

Stöd för hämtning med Apache Arrow

Tre nya cursormetoder erbjuder högpresterande hämtning av kolumnbaserad data genom Arrow C Data Interface:

  • cursor.arrow() returnerar ett komplett pyarrow.Table.
  • cursor.arrow_batch() returnerar en enda pyarrow.RecordBatch.
  • cursor.arrow_reader() returnerar en pyarrow.RecordBatchReader för strömning.

Implementeringen kringgår Python-objektskapande i hot path för förbättrad prestanda. För fullständig dokumentation, se Apache Arrow-integration.

stöd för typen sql_variant

Drivrutinen upptäcker nu sql_variant kolumner vid hämtning, fastställer deras underliggande bastyp och returnerar korrekt typade Python-värden i stället för råa byte.

Note

sql_variant Kolumner använder en strömmande hämtaväg, vilket kan ha en liten prestandapåverkan jämfört med kolumner av fast typ.

Inbyggt UUID-stöd

En ny native_uuid-inställning styr om kolumnerna UNIQUEIDENTIFIER returneras som uuid.UUID-objekt (standard) eller som pyodbc-kompatibla strängar med versaler. Konfigurera den på modulnivå eller per anslutning:

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

För mer information, se Modulkonfiguration.

Radklass offentlig export

Klassen Row exporteras nu på högsta nivå för typannotationer:

from mssql_python import Row

Felkorrigeringar

  • Åtgärdade felaktig identifiering av ? i hakparentesomslutna identifierare, strängliteraler och kommentarer.
  • Fixerad NULL-parameterbindning för VARBINARY kolumner (ger inte längre implicita konverteringsfel).
  • Åtgärdade att datetime.time-värden förlorade mikrosekunder vid tur- och returkonvertering för kolumner från TIME(1) till TIME(7).
  • Åtgärdade hämtningsvägen för Arrow så att den korrekt inkluderar sekundbråkdelar i TIME-kolumner.
  • Fixad bulkkopiering med autentiseringsmetoder för Microsoft Entra ID (föråldrade inloggningsfält orsakar inte längre valideringsfel).
  • Cachade Azure Identity-inloggningsinstanser på modulnivå för förbättrad autentiseringsprestanda.

mssql-python 1.4.0

Releasedatum: mars 2025

Nya funktioner

Stöd för masskopiering

Högpresterande bulkdataladdning finns nu tillgänglig genom 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")

Metoden accepterar alternativ för batch_size, , , timeout, column_mappings, keep_identity, check_constraintstable_lock, , keep_nulls, och fire_triggersuse_internal_transaction.

Se Masskopiering för fullständig dokumentation.

Improvements

  • Prestandaoptimeringar för stora resultatmängder.
  • Minskad minnesanvändning under batchoperationer.
  • Förbättrade felmeddelanden för bulkkopieringsfel.

mssql-python 1.3.0

Releasedatum: januari 2025

Nya funktioner

Inställningsklass

Konfigurera modulövergripande beteende genom den nya Settings klassen:

import mssql_python

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

Se Modulkonfiguration för detaljer.

Improvements

  • Bättre hantering av anslutningstidsavbrott under Azure SQL-failover.
  • Förbättrad kompatibilitet med Python 3.13.

mssql-python 1.2.0

Releasedatum: november 2024

Nya funktioner

Metoder för schemaupptäckt

Nya markörmetoder för databasmetadatautforskning:

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

Se Schema-upptäckt för fullständig dokumentation.

Improvements

  • Förbättrad metadatacache för upprepade schemafrågor.
  • Bättre hantering av beräknade kolumner i columns() resultat.

mssql-python 1.1.0

Releasedatum: september 2024

Nya funktioner

Specialanpassade utgångsomformere

Registrera anpassade funktioner för att transformera kolumnvärden under hämtning:

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)

Hanteringsmetoder:

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

För fullständig dokumentation, se Anpassade typkonverterare.

Improvements

  • Bättre felmeddelanden vid misslyckade typkonverteringar.
  • Stöd för omvandlarfunktioner som returnerar None.

mssql-python 1.0.0

Releasedatum: juli 2024

Första GA-versionen

Den första allmänna tillgänglighetsversionen av mssql-python, Microsoft inbyggda Python-drivrutin för SQL Server.

Kärnfunktioner

  • DDBC-arkitektur: Direkt databasanslutning utan att behöva installera ODBC-drivrutiner.
  • DB-API 2.0-efterlevnad: Standard Python databasgränssnitt.
  • Anslutningspoolning: Inbyggd anslutningspoolhantering.
  • Microsoft Entra-autentisering: Fullt stöd för Azure-identitetsbaserad autentisering.
  • TLS-kryptering: Säkra anslutningar med certifikatvalidering.

Anslutningsfunktioner

  • 21 nyckelord för anslutningssträngar.
  • 9 autentiseringsläge (SQL, Windows och 7 Microsoft Entra ID-metoder).
  • Styrning av autocommit.
  • Exekveringsmetoder: execute(), executemany(), och batch_execute().
  • Kopplingsattribut genom set_attr() och getinfo().
  • Stöd för kontexthanterare.

Markörfunktioner

  • Standardmetoder för hämtning: fetchone(), fetchmany(), fetchall().
  • Utökade metoder: fetchval(), skip().
  • Exekveringsmetoder: execute() och executemany().
  • Radobjekt med attribut- och indexåtkomst.
  • Navigering med flera resultatuppsättningar med nextset().

Stöd för datatyp

  • Alla inbyggda typer i SQL Server.
  • Python↔SQL-typmappningar.
  • SQL-typkonstanter för explicit typning (till exempel mssql_python.SQL_DECIMAL).
  • NULL-hantering i Python None.

Transaktionsstöd

  • Manuell incheckning och återställning.
  • Autocommit-läge.
  • Isoleringsnivåkontroll.
  • Upptäckt och hantering av deadlock.

Autentiseringslägen

Mode Beskrivning
SQL Server-autentisering Användarnamn och lösenord
Windows authentication Trusted_Connection
ActiveDirectoryDefault DefaultAzureCredential
ActiveDirectoryInteractive Webbläsarbaserad inloggning
ActiveDirectoryDeviceCode Enhetskodflöde
ActiveDirectoryPassword Microsoft Entra användarnamn och lösenord (föråldrat; använder ROPC)
ActiveDirectoryMSI Hanterad identitet
ActiveDirectoryServicePrincipal Service Principal
ActiveDirectoryIntegrated Windows Kerberos

Upgrade

Från pyodbc

För detaljerad migrationsvägledning, se Migrera från pyodbc.

Viktiga skillnader:

  • Både ? (qmark) och %(name)s (pyformat) parameterstilar stöds. Dina befintliga ? frågor fungerar utan ändringar.
  • Ingen callproc() metod. Använd EXECUTE-satser i stället.
  • Inbyggd anslutningspooling.
  • Inget beroende av extern ODBC-drivrutin.

Från pymssql

För detaljerad migreringsguidning, se Migrera från pymssql.

Viktiga skillnader:

  • Byt ut %s och %d parametermarkörer med ? eller %(name)s.
  • Använd en reťazec pripojenia istället för positionsargument.
  • Inget FreeTDS-beroende.
  • Flera samtidiga markörer per anslutning.
  • Radobjekt med attributåtkomst ersätter as_dict=True.

Mellan versioner av mssql-python

Uppgradera drivrutinen för att få nya funktioner och fixar.

pip install --upgrade mssql-python

Kolla versionsnoterna för eventuella brytande ändringar innan du uppgraderar produktionssystemen.

Roadmap

För kommande funktioner och utvecklingsplanen, se GitHub-arkivet.