Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Každé vydání ovladače mssql-python přináší nové funkce, zlepšení výkonu a opravy chyb. Následující části podrobně popisují každou verzi.
mssql-python 1.12.0
Datum vydání: červenec 2026
Enhancements
Samostatný mssql-python-odbc doprovodný balíček
Binárky ovladačů ODBC, které mssql-python jsou potřeba za běhu, jsou nyní také publikovány jako samostatný, pouze datový doprovodný balíček: mssql-python-odbc (import name mssql_python_odbc, aktuálně připnutý k verzi 18.6.2). Balíček mssql-python deklaruje mssql-python-odbc==18.6.2 v install_requires, takže pip install mssql-python transparentně instaluje doprovodný balíček vedle něj. Nejsou vyžadovány žádné změny kódu.
Nativní zavaděč upřednostňuje externí balíček mssql_python_odbc, je-li k dispozici, a pokud ne, použije binární soubory ODBC, které jsou stále součástí balíčku wheel mssql-python. Záložní varianta je bezpečná s Python Global Interpreter Lock (GIL) a funguje na linuxových distribucích založených na musl, jako je Alpine.
Toto rozdělení umožňuje připnout nebo aktualizovat binární soubory ovladačů nezávisle na Python kódu, dává redistributorům menší mssql-python kolečko v průběhu času a zabraňuje problémům s vlastnictvím duplicit u přidaných ODBC souborů.
Důležité
To rozdělilo lodě bez jediné změny. V budoucím hlavním vydání (v2.0.0) může být balený libs/ strom odstraněn, v takovém případě mssql-python-odbc se stane tvrdým požadavkem na běh.
Opravy chyb
cursor.bulkcopy() Nyní používá časový limit připojení rodičovského připojení
Operace hromadného kopírování otevře samostatné připojení prostřednictvím nativního rozšíření mssql_py_core. Dříve tato operace vždy používala pevně zakódovaný 15sekundový timeout připojení bez možnosti přepsat ho v Python. Pokud nastavíte časový limit připojení na rodičovském připojení (),connect(..., timeout=<seconds>)bulkcopy() nyní tuto hodnotu přepošlete do interního připojení. Nastavení timeout=0 zachovává chování bez přepsání a zachovává interní výchozí 15sekundovou dobu. Pro tuto operaci se použije časový limit kurzoru platný v okamžiku volání bulkcopy(), takže pozdější změny v nadřazeném připojení neovlivní právě probíhající operaci hromadného kopírování.
Následující příklad používá vyhledávací tabulku Production.Culture z ukázkové databáze AdventureWorks. Upravte připojovací řetězec a název databáze pro vaše prostředí:
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() podporuje uživatelsky definované sloupce typu CLR
Dříve u Protocol Error: Unsupported TDS type for bulk copy: 0xF0 docházelo k selhání cursor.bulkcopy() pro libovolný cílový sloupec, který používal uživatelsky definovaný typ CLR, včetně vestavěných typů geography, geometry a hierarchyid a jakéhokoli vlastního typu CLR UDT registrovaného v sestavení. Nativní mssql_py_core drátová cesta neměla handler pro UDT typ token (0xF0) a při zápisu metadat sloupců došlo k chybě před odesláním řádků. Sloupce CLR UDT se nyní při přenosu mapují na varbinary(max) a poskytované bajty se přenášejí jako datová část UDT IBinarySerialize, stejně jako pyodbc a python-tds načítají sloupce UDT. SQL Server materializuje UDT při vložení. Dodáno prostřednictvím mssql_py_core aktualizace z 0.1.6 na 0.1.7.
Následující příklad archivuje sloupec org-chart z tabulky HumanResources.Employee (sloupec typu hierarchyid, jeden z vestavěných CLR UDT systému SQL Server) do nové tabulky. V reálném workflow mohou bajty UDT pocházet z jiné instance SQL Server, serializovaného souboru nebo výstupu IBinarySerialize.Write() vašeho CLR typu; tento příklad je čte z existujícího sloupce via CAST(... AS varbinary(max)) tak, aby byl vzorek samostatný. Hromadná kopie obsahuje řádek, jehož OrganizationNode je NULL:
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")
Pro vlastní CLR UDT registrovaný v assembleru použijte typ v cílové tabulce a dodajte bajty vytvořené metodou daného typu IBinarySerialize.Write() .
mssql-python 1.11.0
Datum vydání: červenec 2026
Enhancements
Zlepšená sémantika správce kontextu
with connection: nyní správně potvrzuje transakce při korektním ukončení a při výjimce je vrací zpět, takže je to více v souladu s Pythonem a předvídatelnější.
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
Opravy chyb
- Bylo opraveno uváznutí na GIL při ukončování ODBC (
conn.close()acursor.close()) a vSQLDescribeParampro parametry s hodnotouNonev konfiguracích se SSH tunelem a s in-process forwarderem. - Pevné
BINARYaVARBINARYNULL parametry v dočasných tabulkách a tabulkových proměnných. Když automatické určení typu selže, ovladač nyní vygeneruje varování Pythonu s explicitními pokynycursor.setinputsizes(). - Opravena chyba, kdy
import mssql_pythonna Apple Silicon selhávalo při čisté instalaci (regrese v 1.8.0). Závislosti přibalené knihovny ODBC dylib jsou nyní přepsány pro architekturyarm64ix86_64. - Opraveno uváznutí GIL v jádru v Rustu, které při autentizaci pomocí
Authentication=ActiveDirectoryServicePrincipalzpůsobovalo zamrznutí operací hromadného kopírování.
mssql-python 1.10.0
Datum vydání: červen 2026
Enhancements
Podpora hromadného kopírování v ActiveDirectoryServicePrincipal
cursor.bulkcopy() nyní podporuje Authentication=ActiveDirectoryServicePrincipal, což umožňuje hromadné vkládání dat pomocí přihlašovacích údajů instančního objektu služby.
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")
Opravy chyb
- Byla opravena data obsahující znaky mimo ASCII v
VARCHARaCHARv cestě načítání Arrow. - Pevné časové limity připojení během operací hromadného zatížení.
MSSQL-Python 1.9.0
Datum vydání: červen 2026
Enhancements
Řádkové objekty v hromadné kopii
cursor.bulkcopy() nyní přijímá načítané objekty Row přímo místo nutnosti ruční převodu n-tic.
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")
Opravy chyb
- Pevné pouzdro koleček, takže
simdutfje vždy staticky propojené. - Pevné
DECIMALvelké inserty vexecutemany(). - Opraven nesprávný type-fallback pro NULL parametry.
- Opraveny problémy při serializaci a deserializaci výjimek.
- Opraveno
nextset()tak, aby sePRINTzprávy uchovávaly napříč sadami výsledků. - Opraveno zpracování
Rowv záložní větviexecutemany()pro data za běhu. - Opravena kontrola typů metody fetch pro nástroje statické analýzy.
mssql-python 1.8.0
Datum vydání: květen 2026
Enhancements
Podpora hromadného kopírování v ActiveDirectoryMSI
cursor.bulkcopy() nyní podporuje Authentication=ActiveDirectoryMSI systémově a uživatelem přiřazené spravované identity.
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")
Indexování řádků pomocí řetězcových klíčů
Nyní můžete přistupovat k hodnotám řádků podle názvu sloupce, například row["col"], kromě pozičního indexování a přístupu k atributům.
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
Balíček pro upgrade ovladačů ODBC
Přibalený ovladač Microsoft ODBC pro SQL Server byl aktualizován na verzi 18.6.2.1.
Opravy chyb
- Opraveny problémy se životností odloženého atributu připojení v autentizaci založené na tokenech.
- Opraveno opakované parsování připojovací řetězec v autentizační cestě.
- Fixní
executemany()typové anotace pro vstupy sekvencí.
mssql-python 1.7.1
Datum vydání: květen 2026
Enhancements
Rozšířené pokrytí kol a zlepšení výkonu
Tato verze přidává volanta kompatibilní s RHEL 8, obnovuje volanty macOS Python 3.10universal2, zlepšuje ovládání UTF-16 prostřednictvím simdutf, a optimalizuje horkou cestuexecute().
Dopad na výkon: Propustnost dávkového vykonávání se zlepšuje o ~15% u typických pracovních zátěží díky optimalizaci horké cesty v metodě execute() .
Opravy chyb
- Byla opravena selhání přihlášení tak, aby vyvolávala výjimky DB-API
mssql_pythonmístoRuntimeError. - Rozšířené uvolnění GIL napříč blokováním volání atributů ODBC při vykonávání, načítání, transakcích a připojení.
- Opraveny
executemany()chyby při změně znaménka desetinných hodnot. - Opraveno nekonzistentní dekódování CP1252
VARCHARnapříč platformami. - Opravené
cursor.bulkcopy()chyby pro prázdné řetězce vNVARCHAR(MAX)aVARCHAR(MAX)sloupcích.
Note
Verze 1.7.0 byla stažena kvůli problémům s publikací. Použijte verzi 1.7.1 nebo novější.
mssql-python 1.6.0
Datum vydání: duben 2026
Enhancements
Sanitizace připojovací řetězec založená na parseru
Toto vylepšení zajišťuje správné parsování speciálních znaků v polích pro hesla a v závorkových hodnotách.
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"
)
Čištění připojovacího řetězce bylo přesunuto z logiky založené na regulárních výrazech na zpracování založené na parseru, aby byla správně zpracována syntaxe připojovacího řetězce ODBC.
Opravy chyb
- Opraveno uvolnění GIL během blokování operací ODBC připojení a odpojení.
- Opraveny pády související s nápovědami
setinputsizes()aSQL_DECIMALvSQL_NUMERIC. - Opraveno nesprávné
fetchone()chování pro katalogové metody ODBC. - Byly opraveny chyby neplatného stavu kurzoru při použití
reset_cursor=False. - Fixní
executemany()tipy pro sekvence parametrů založené na mapování. - Přidána ochrana proti průchodu adresářovou strukturou pro
setup_logging(log_file_path=...).
mssql-python 1.5.0
Datum vydání: duben 2026
Nové funkce
Podpora načítání Apache Arrow
Tři nové metody kurzoru poskytují vysoce výkonné sloupcové vyhledávání dat prostřednictvím rozhraní Arrow C Data Interface:
-
cursor.arrow()vrátí kompletnípyarrow.Table. -
cursor.arrow_batch()Vrátí jednopyarrow.RecordBatch. -
cursor.arrow_reader()vracípyarrow.RecordBatchReaderpro streamování.
Implementace v kritické části kódu vynechává vytváření objektů Pythonu, aby se zvýšil výkon. Pro kompletní dokumentaci viz integrace Apache Arrow.
podpora typu sql_variant
Ovladač nyní detekuje sql_variant sloupce při načítání, rozlišuje jejich základní typ a vrací správně zadané hodnoty v Python místo surových bajtů.
Note
sql_variant Sloupce používají streamovanou cestu načítaní, která může mít mírný dopad na výkon ve srovnání s pevně danými sloupci.
Nativní podpora UUID
Nové nastavení native_uuid určuje, zda se sloupce UNIQUEIDENTIFIER vracejí jako objekty uuid.UUID (výchozí), nebo jako řetězce psané velkými písmeny kompatibilní s pyodbc. Konfigurujte ho na úrovni modulu nebo podle připojení:
# 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)
Pro více informací viz Konfigurace modulu.
Veřejný export třídy řádku
Třída Row je nyní exportována na nejvyšší úrovni pro typové anotace:
from mssql_python import Row
Opravy chyb
- Opravena chybná detekce
?uvnitř identifikátorů v závorkách, řetězcových literálů a komentářů. - Pevné přiřazení NULL parametrů pro
VARBINARYsloupce (již nezpůsobuje implicitní konverzní chyby). - Opraven problém, kdy hodnoty
datetime.timepři zpětném převodu ztrácely mikrosekundy u sloupců odTIME(1)doTIME(7). - Byla opravena cesta načítání Arrow, aby správně zahrnovala zlomkové sekundy pro sloupce
TIME. - Opraveno hromadné kopírování pomocí autentizačních metod Microsoft Entra ID (zastaralá přihlašovací pole už nezpůsobují chyby validace).
- Cacheované instance přihlašovacích údajů Azure Identity na úrovni modulu pro lepší výkon autentizace.
mssql-python 1.4.0
Datum vydání: březen 2025
Nové funkce
Podpora hromadného kopírování
Vysoce výkonné hromadné načítání dat je nyní dostupné prostřednictvím 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 přijímá možnosti pro batch_size, timeout, column_mappings, keep_identity, check_constraints, table_lock, keep_nulls, fire_triggersa .use_internal_transaction
Kompletní dokumentaci naleznete v Hromadné kopii .
Vylepšení
- Optimalizace výkonu pro velké sady výsledků.
- Snížení spotřeby paměti během dávkových operací.
- Vylepšené chybové zprávy při selhání hromadného kopírování.
mssql-python 1.3.0
Datum vydání: leden 2025
Nové funkce
Třída nastavení
Konfigurujte chování v celém modulu prostřednictvím nové Settings třídy:
import mssql_python
settings = mssql_python.get_settings()
settings.lowercase = True # Lowercase column names in cursor.description
Podrobnosti viz Konfigurace modulu .
Vylepšení
- Lepší řešení vypršení připojení během failoveru Azure SQL.
- Zlepšená kompatibilita s Python 3.13.
mssql-python 1.2.0
Datum vydání: listopad 2024
Nové funkce
Metody objevování schémat
Nové metody kurzoru pro průzkum metadat databáze:
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()
Viz Schema discovery pro kompletní dokumentaci.
Vylepšení
- Vylepšené cachování metadat pro opakované dotazy na schémata.
- Lepší zpracování vypočítaných sloupců ve výsledcích
columns().
mssql-python 1.1.0
Datum vydání: září 2024
Nové funkce
Vlastní výstupní měniče
Registrujte vlastní funkce pro transformaci hodnot sloupců během načítání:
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 řízení:
add_output_converter(sql_type, converter_func)get_output_converter(sql_type)remove_output_converter(sql_type)clear_output_converters()
Pro kompletní dokumentaci viz Custom Type Converters.
Vylepšení
- Lepší chybové zprávy při selhání převodu typů.
- Podpora funkcí převodníku, které vracejí
None.
mssql-python 1.0.0
Datum vydání: červenec 2024
První vydání GA
První všeobecně dostupná verze mssql-python, nativního Python ovladače Microsoft pro SQL Server.
Základní funkce
- Architektura DDBC: Přímé připojení k databázi bez nutnosti instalace ovladačů ODBC.
- Soulad s DB-API 2.0: Standardní databázové rozhraní Pythonu.
- Sdružování připojení: Vestavěná správa fondu připojení.
- Ověřování Microsoft Entra: Plná podpora ověřování na základě identity Azure.
- TLS šifrování: Zabezpečené spojení pomocí ověřování certifikátů.
Funkce připojení
- 21 klíčových slov připojovacího řetězce.
- 9 autentizačních režimů (SQL, Windows a 7 metod Microsoft Entra ID).
- Ovládání autocommitu.
- Metody provádění:
execute(),executemany(), abatch_execute(). - Atributy připojení prostřednictvím
set_attr()agetinfo(). - Podpora správce kontextu.
Funkce kurzoru
- Standardní metody načítání:
fetchone(),fetchmany(), .fetchall() - Rozšířené metody:
fetchval(), .skip() - Metody provádění:
execute()aexecutemany(). - Řádkové objekty s přístupem k atributům a indexům.
- Navigace s množinou výsledků pomocí
nextset().
Podpora datových typů
- Všechny nativní typy pro SQL Server.
- Mapování typů Python↔SQL.
- SQL typové konstanty pro explicitní typování (například
mssql_python.SQL_DECIMAL). - Zpracování hodnoty NULL stejně jako v Pythonu
None.
Podpora transakcí
- Ruční potvrzení a vrácení změn.
- Režim automatického potvrzování.
- Kontrola úrovně izolace.
- Detekce a řešení zablokování.
Režimy ověřování
| Mode | Popis |
|---|---|
| Ověřování SQL Serveru | Uživatelské jméno a heslo |
| Autentizace Windows | Trusted_Connection |
| ActiveDirectoryDefault | DefaultAzureCredential |
| ActiveDirectoryInteractive | Přihlášení v prohlížeči |
| ActiveDirectoryDeviceCode | Tok kódu zařízení |
| ActiveDirectoryPassword | Microsoft Entra uživatelské jméno a heslo (zastaralé; používá ROPC) |
| ActiveDirectoryMSI | Spravovaná identita |
| ActiveDirectoryServicePrincipal | Hlavní služba |
| ActiveDirectoryIntegrated | Windows Kerberos |
Upgrade
Z pyodbc
Pro podrobné pokyny k migraci viz Migrate from pyodbc.
Hlavní rozdíly:
- Podporovány jsou jak
?(qmark), tak (pyformat) styly%(name)sparametrů. Vaše stávající?dotazy fungují bez změn. - Žádná
callproc()metoda. Místo toho použijte příkazyEXECUTE. - Vestavěné sdružování připojení.
- Žádná závislost na externím ODBC ovladači.
Z pymssql
Pro podrobné pokyny k migraci viz Migrate from pymssql.
Hlavní rozdíly:
- Nahraďte značky parametrů
%sa%dznačkami?nebo%(name)s. - Použijte připojovací řetězec místo pozičních argumentů.
- Žádná závislost na FreeTDS.
- Více současných kurzorů na jedno připojení.
- Řádkové objekty s přístupem k atributům nahrazují
as_dict=True.
Mezi verzemi mssql-python
Upgradujte ovladač pro nové funkce a opravy.
pip install --upgrade mssql-python
Před upgradem produkčních systémů si zkontrolujte poznámky k vydání, jestli se neobjeví nějaké zásadní změny.
Plán cesty
Pro nadcházející funkce a vývojový plán navštivte repozitář GitHub.