Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Każda wersja sterownika mssql-python wprowadza nowe funkcje, poprawę wydajności oraz poprawki błędów. Poniższe sekcje szczegółowo opisują każdą wersję.
mssql-python 1.11.0
Data premiery: lipiec 2026
Enhancements
Ulepszona semantyka menedżera kontekstu
with connection: teraz prawidłowo zatwierdza transakcje przy poprawnym zakończeniu i wycofuje je w przypadku wyjątku, co czyni go bardziej zgodnym z idiomami Pythona i przewidywalnym.
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
Poprawki błędów
- Naprawiono zakleszczenie GIL w ścieżce zamykania ODBC (
conn.close()icursor.close()) oraz wSQLDescribeParamdla parametrów o wartościNonew konfiguracjach tunelu SSH i przekazywania w procesie. - Naprawiono parametry NULL
BINARYiVARBINARYw tabelach tymczasowych i zmiennych tabelowych. Gdy automatyczne określanie typu kończy się niepowodzeniem, sterownik generuje ostrzeżenie języka Python z jasnymi wskazówkamicursor.setinputsizes(). - Naprawiono problem z
import mssql_pythonna Apple Silicon przy czystej instalacji (regresja w wersji 1.8.0). Dołączone zależności ODBC dylib są teraz przepisywane ponownie dla architektur zarównoarm64, jak ix86_64. - Naprawiono zakleszczenie GIL w rdzeniu Rust, które powodowało zawieszanie się operacji kopiowania zbiorczego podczas uwierzytelniania za pomocą
Authentication=ActiveDirectoryServicePrincipal.
mssql-python 1.10.0
Data wydania: czerwiec 2026 r.
Enhancements
ActiveDirectoryServicePrincipal wsparcie dla kopiowania masowego
cursor.bulkcopy() teraz obsługuje Authentication=ActiveDirectoryServicePrincipal, umożliwiając zbiorcze wstawianie przy użyciu poświadczeń jednostki usługi.
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")
Poprawki błędów
- Naprawiono obsługę danych niebędących ASCII
VARCHARiCHARw ścieżce pobierania Arrow. - Stałe przerwy połączeń podczas operacji ładowania masowego.
mssql-python 1.9.0
Data wydania: czerwiec 2026 r.
Enhancements
Obiekty wierszy w kopiowaniu zbiorczym
cursor.bulkcopy() teraz bezpośrednio akceptuje pobrane obiekty Row zamiast wymagać ręcznej konwersji krotek.
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")
Poprawki błędów
- Obudowa z kółkami stałymi, więc
simdutfzawsze jest statycznie połączona. - Stałe duże
DECIMALwstawki wexecutemany(). - Naprawiono nieprawidłowe określanie typu zastępczego dla parametrów NULL.
- Naprawiono cykle serializacji i deserializacji wyjątków.
- Naprawiono
nextset(), aby zachowywałPRINTkomunikaty między zestawami wyników. - Poprawiono obsługę
Roww ścieżce awaryjnejexecutemany()data-at-execution. - Naprawiono sprawdzanie typów metody fetch dla narzędzi do analizy statycznej.
mssql-python 1.8.0
Data wydania: maj 2026 r.
Enhancements
Wsparcie ActiveDirectoryMSI dla kopiowania masowego
cursor.bulkcopy() obsługuje teraz Authentication=ActiveDirectoryMSI dla tożsamości zarządzanych przypisanych przez system i przez użytkownika.
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")
Indeksowanie wierszy za pomocą klucza tekstowego
Teraz możesz uzyskać dostęp do wartości wierszy według nazwy kolumny, na przykład row["col"], oprócz indeksowania pozycyjnego i dostępu do atrybutów.
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
Pakietowa aktualizacja sterownika ODBC
Dołączony sterownik Microsoft ODBC dla SQL Server został zaktualizowany do wersji 18.6.2.1.
Poprawki błędów
- Naprawiono problemy z odroczonym czasem życia atrybutów połączenia w uwierzytelnianiu opartym na tokenach.
- Naprawiono powtarzające się parsowanie parametry połączenia w ścieżce uwierzytelniania.
- Stałe
executemany()adnotacje typów dla wejść sekwencji.
mssql-python 1.7.1
Data wydania: maj 2026 r.
Enhancements
Rozszerzone pokrycie kół i poprawa osiągów
Ta wersja dodaje koła kompatybilne z RHEL 8, przywraca koła macOS Python 3.10universal2, poprawia obsługę UTF-16 dzięki simdutf, oraz optymalizuje ścieżkę execute() gorącą.
Wpływ na wydajność: Przepustowość przetwarzania wsadowego wzrasta o ~15% w przypadku typowych obciążeń dzięki optymalizacjom ścieżki krytycznej w metodzie execute().
Poprawki błędów
- Naprawiono problem z niepowodzeniami logowania, dzięki czemu zgłaszają one wyjątki DB-API
mssql_pythonzamiastRuntimeError. - Rozszerzono zwalnianie GIL podczas blokujących wywołań ODBC dotyczących wykonywania, pobierania, transakcji i atrybutów połączenia.
- Naprawiono
executemany()problemy występujące, gdy wartości dziesiętne zmieniają znak. - Naprawiono niespójne dekodowanie CP1252
VARCHARna różnych platformach. - Naprawiono
cursor.bulkcopy()niepowodzenia spowodowane pustymi ciągami w kolumnachNVARCHAR(MAX)iVARCHAR(MAX).
Note
Wersja 1.7.0 została wycofana z powodu problemów z publikacją. Użyj wersji 1.7.1 lub nowzej.
mssql-python 1.6.0
Data wydania: kwiecień 2026 r.
Enhancements
Oczyszczanie parametrów połączenia oparte na parserze
To ulepszenie zapewnia poprawne parsowanie znaków specjalnych w polach haseł i wartościach nawiasowych.
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"
)
Oczyszczanie parametrów połączenia przeniesiono z logiki opartej na wyrażeniach regularnych do przetwarzania opartego na parserze, aby zapewnić prawidłową obsługę składni parametrów połączenia ODBC.
Poprawki błędów
- Naprawiono zwolnienie GIL podczas blokowania operacji łączenia i rozłączania ODBC.
- Naprawiono awarie związane z
setinputsizes()oraz podpowiedziamiSQL_DECIMALiSQL_NUMERIC. - Naprawiono nieprawidłowe
fetchone()zachowanie metod katalogowych ODBC. - Naprawiono błędy nieprawidłowego stanu kursora, gdy używano
reset_cursor=False. - Stałe
executemany()wskazówki typu dla sekwencji parametrów opartych na mapowaniu. - Dodano ochronę przejścia ścieżki dla
setup_logging(log_file_path=...).
mssql-python 1.5.0
Data wydania: kwiecień 2026 r.
Nowe funkcje
Obsługa pobierania Apache Arrow
Trzy nowe metody kursorów zapewniają wysokowydajne pobieranie danych kolumnowych za pośrednictwem interfejsu danych Arrow C:
-
cursor.arrow()zwraca kompletnypyarrow.Table. -
cursor.arrow_batch()zwraca pojedynczypyarrow.RecordBatch. -
cursor.arrow_reader()zwracapyarrow.RecordBatchReaderdo przesyłania strumieniowego.
Implementacja omija tworzenie obiektów w Python na gorącej ścieżce, co poprawia wydajność. Pełną dokumentację można znaleźć w artykule o integracji z Apache Arrow.
Obsługa typu sql_variant
Sterownik wykrywa teraz kolumny sql_variant podczas pobierania, ustala ich bazowy typ i zwraca wartości Pythona o poprawnym typie zamiast surowych bajtów.
Note
Kolumny sql_variant używają ścieżki strumieniowego pobierania danych, co może nieznacznie wpływać na wydajność w porównaniu z kolumnami o stałym typie.
Natywne wsparcie UUID
Nowe native_uuid ustawienie decyduje, czy UNIQUEIDENTIFIER kolumny są zwracane jako uuid.UUID obiekty (domyślnie), czy jako ciągi znaków wielkich liter zgodnych z pyodbc. Konfiguruj go na poziomie modułu lub dla każdego połączenia:
# 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)
Więcej informacji można znaleźć w sekcji Konfiguracja modułu.
Publiczny eksport klasy rzędowej
Klasa Row jest teraz eksportowana na poziomie głównym dla adnotacji typów:
from mssql_python import Row
Poprawki błędów
- Naprawiono fałszywe wykrycia
?w identyfikatorach ujętych w nawiasy, literałach łańcuchowych i komentarzach. - Naprawiono wiązanie parametrów NULL dla kolumn
VARBINARY(nie powoduje już błędów niejawnej konwersji). - Naprawiono problem utraty mikrosekund przez wartości
datetime.timepodczas konwersji tam i z powrotem w kolumnach odTIME(1)doTIME(7). - Naprawiono ścieżkę pobierania Arrow, aby poprawnie uwzględniała ułamki sekund dla kolumn
TIME. - Naprawiłem kopiowanie masowe za pomocą metod uwierzytelniania Microsoft Entra ID (przestarzałe pola poświadczeń nie powodują już błędów walidacji).
- Buforowano instancje poświadczeń Azure Identity na poziomie modułu w celu zwiększenia wydajności uwierzytelniania.
mssql-python 1.4.0
Data premiery: marzec 2025
Nowe funkcje
Wsparcie dla kopiowania masowego
Wysokowydajne ładowanie danych masowych jest teraz dostępne poprzez 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")
Metoda akceptuje opcje dla batch_size, timeout, column_mappings, keep_identity, check_constraints, table_lock, keep_nulls, fire_triggersoraz .use_internal_transaction
Pełną dokumentację znajdziesz w sekcji Kopiowanie zbiorcze.
Ulepszenia
- Optymalizacje wydajności dla dużych zbiorów wyników.
- Zmniejszone zużycie pamięci podczas operacji wsadowych.
- Ulepszone komunikaty o błędach dotyczące niepowodzeń podczas kopiowania zbiorczego.
mssql-python 1.3.0
Data premiery: styczeń 2025
Nowe funkcje
Klasa ustawień
Konfiguruj zachowanie całego modułu poprzez nową Settings klasę:
import mssql_python
settings = mssql_python.get_settings()
settings.lowercase = True # Lowercase column names in cursor.description
Zobacz Konfigurację modułu dla szczegółów.
Ulepszenia
- Lepsza obsługa limitu czasu połączenia podczas przełączania awaryjnego Azure SQL.
- Poprawa kompatybilności z Python 3.13.
MSSQL-Python 1.2.0
Data premiery: listopad 2024
Nowe funkcje
Metody odkrywania schematów
Nowe metody eksploracji metadanych bazy danych kursorem:
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()
Pełną dokumentację znajdziesz w sekcji Wykrywanie schematów.
Ulepszenia
- Ulepszone buforowanie metadanych dla powtarzających się zapytań schematów.
- Lepsza obsługa kolumn obliczeniowych w wynikach
columns().
mssql-python 1.1.0
Data premiery: wrzesień 2024
Nowe funkcje
Niestandardowe przetworniki wyjściowe
Rejestruj niestandardowe funkcje do transformacji wartości kolumn podczas pobierania:
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)
Metody zarządzania:
add_output_converter(sql_type, converter_func)get_output_converter(sql_type)remove_output_converter(sql_type)clear_output_converters()
Pełną dokumentację można znaleźć w artykule Konwertery typów niestandardowych.
Ulepszenia
- Lepsze komunikaty o błędach przy niepowodzeniach konwersji typów.
- Obsługa funkcji konwerterów zwracających
None.
MSSQL-Python 1.0.0
Data premiery: lipiec 2024
Pierwsze wydanie GA
Pierwsza ogólnodostępna wersja mssql-python, natywnego sterownika Python Microsoft dla SQL Server.
Podstawowe funkcje
- Architektura DDBC: Bezpośrednia łączność z bazą danych bez konieczności instalacji sterownika ODBC.
- Zgodność z DB-API 2.0: Standardowy interfejs bazy danych języka Python.
- Pulowanie połączeń: Wbudowane zarządzanie pulą połączeń.
- Uwierzytelnianie Microsoft Entra: Pełna obsługa uwierzytelniania opartego na tożsamości platformy Azure.
- Szyfrowanie TLS: Bezpieczne połączenia dzięki walidacji certyfikatów.
Funkcje połączenia
- 21 słów kluczowych ciągu połączenia
- 9 trybów uwierzytelniania (SQL, Windows oraz 7 metod Microsoft Entra ID).
- Sterowanie trybem autocommit.
- Metody wykonania:
execute(),executemany(), orazbatch_execute(). - Atrybuty połączenia za pomocą
set_attr()igetinfo(). - Wsparcie dla menedżera kontekstu.
Funkcje kursora
- Standardowe metody pobierania:
fetchone(),fetchmany(), .fetchall() - Metody rozszerzone:
fetchval(), .skip() - Metody wykonania:
execute()orazexecutemany(). - Obiekty wierszowe z dostępem do atrybutów i indeksów.
- Nawigacja po wielu zestawach wyników za pomocą
nextset().
Obsługa typów danych
- Wszystkie natywne typy SQL Server.
- Mapowania typu Python ↔SQL.
- Stałe typu SQL do typowania jawnego (na przykład
mssql_python.SQL_DECIMAL). - Obsługa wartości NULL jak w Pythonie
None.
Obsługa transakcji
- Ręczne zatwierdzanie i wycofywanie.
- Tryb automatycznego zatwierdzania zmian.
- Kontrola poziomu izolacji.
- Wykrywanie i obsługa zakleszczeń.
Tryby uwierzytelniania
| Mode | Opis |
|---|---|
| Uwierzytelnianie programu SQL Server | Nazwa użytkownika i hasło |
| uwierzytelnianie Windows | Trusted_Connection |
| ActiveDirectoryDefault | DefaultAzureCredential |
| ActiveDirectoryInteractive | Logowanie przez przeglądarkę |
| ActiveDirectoryDeviceCode | Przepływ kodu urządzenia |
| ActiveDirectoryPassword | Microsoft Entra — nazwa użytkownika i hasło (przestarzałe; używa ROPC) |
| ActiveDirectoryMSI | Tożsamość zarządzana |
| ActiveDirectoryServicePrincipal | Główna usługa |
| ActiveDirectoryIntegrated | Windows Kerberos |
Upgrade
Z pyodbc
Szczegółowe wskazówki dotyczące migracji znajdują się w artykule Migrate from pyodbc.
Kluczowe różnice:
- Obsługiwane są zarówno style parametrów
?(qmark), jak i%(name)s(pyformat). Twoje istniejące?zapytania działają bez zmian. - Brak metody
callproc(). Zamiast tego używaj instrukcjiEXECUTE. - Wbudowane łączenie połączeń.
- Brak zewnętrznej zależności sterownika ODBC.
Z pymssql
Szczegółowe wskazówki dotyczące migracji znajdziesz w artykule Migrate from pymssql.
Kluczowe różnice:
- Zastąp
%si%dmarkery parametrów na?lub%(name)s. - Zamiast argumentów pozycyjnych używaj parametry połączenia.
- Brak zależności od FreeTDS.
- Wiele współbieżnych kursorów na połączenie.
- Obiekty wierszowe z dostępem do atrybutów zastępują
as_dict=True.
Między wersjami mssql-python
Zaktualizuj sterownik, aby uzyskać nowe funkcje i poprawki.
pip install --upgrade mssql-python
Sprawdź notatki do wydania pod kątem jakichkolwiek drobnych zmian przed aktualizacją systemów produkcyjnych.
Roadmap
Nadchodzące funkcje i plan rozwoju znajdziesz w repozytorium GitHub.