Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Setiap rilis driver mssql-python memperkenalkan fitur baru, peningkatan kinerja, dan perbaikan bug. Bagian berikut merinci setiap versi.
mssql-python 1.11.0
Tanggal rilis: Juli 2026
Enhancements
Semantik manajer konteks yang disempurnakan
with connection: sekarang mengonfirmasi transaksi dengan benar saat keluar secara normal dan membatalkan transaksi saat terjadi pengecualian, sehingga membuatnya lebih Pythonic dan dapat diprediksi.
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
Pemulihan kesalahan perangkat lunak
- Memperbaiki deadlock GIL di jalur teardown ODBC (
conn.close()dancursor.close()) dan diSQLDescribeParamuntuk parameter bernilaiNonedalam konfigurasi terowongan SSH dan forwarder dalam proses. - Memperbaiki parameter NULL
BINARYdanVARBINARYpada tabel sementara dan variabel tabel. Ketika resolusi jenis otomatis gagal, driver sekarang memancarkan peringatan Python dengan panduan eksplisit.cursor.setinputsizes() - Memperbaiki masalah
import mssql_pythonyang gagal pada Apple Silicon dengan instalasi bersih (regresi pada versi 1.8.0). Dependensi dylib ODBC yang disertakan kini telah ditulis ulang untuk arsitekturarm64danx86_64. - Memperbaiki deadlock GIL di core Rust yang menyebabkan operasi penyalinan massal terhenti saat mengautentikasi dengan
Authentication=ActiveDirectoryServicePrincipal.
mssql-python 1.10.0
Tanggal rilis: Juni 2026
Enhancements
Dukungan ActiveDirectoryServicePrincipal untuk salinan massal
cursor.bulkcopy() sekarang mendukung Authentication=ActiveDirectoryServicePrincipal, sehingga memungkinkan penyisipan massal menggunakan kredensial service principal.
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")
Pemulihan kesalahan perangkat lunak
- Memperbaiki data non-ASCII
VARCHARdanCHARdi jalur pengambilan Arrow. - Memperbaiki batas waktu koneksi selama operasi pemuatan massal.
mssql-python 1.9.0
Tanggal rilis: Juni 2026
Enhancements
Objek baris dalam salinan massal
cursor.bulkcopy() sekarang menerima objek Row yang diambil secara langsung, alih-alih mengharuskan konversi tuple secara manual.
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")
Pemulihan kesalahan perangkat lunak
- Kemasan roda tetap sehingga
simdutfselalu terhubung secara statis. - Memperbaiki sisipan besar
DECIMALdiexecutemany(). - Memperbaiki fallback tipe yang keliru untuk parameter NULL.
- Memperbaiki round-trip pickle dan unpickle pada pengecualian.
- Diperbaiki
nextset()sehingga mempertahankanPRINTpesan di seluruh kumpulan hasil. - Memperbaiki penanganan
Rowpada jalur fallbackexecutemany()data-at-execution. - Memperbaiki pemeriksaan tipe metode fetch untuk alat analisis statis.
mssql-python 1.8.0
Tanggal rilis: Mei 2026
Enhancements
Dukungan ActiveDirectoryMSI untuk salinan massal
cursor.bulkcopy() sekarang mendukung Authentication=ActiveDirectoryMSI untuk identitas terkelola yang ditetapkan sistem dan yang ditetapkan pengguna.
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")
Pengindeksan baris dengan kunci string
Anda sekarang dapat mengakses nilai baris berdasarkan nama kolom, misalnya row["col"], selain pengindeksan posisi dan akses atribut.
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
Peningkatan driver ODBC yang dibundel
Driver Microsoft ODBC yang dibundel untuk SQL Server diperbarui ke 18.6.2.1.
Pemulihan kesalahan perangkat lunak
- Memperbaiki masalah masa pakai atribut koneksi yang ditangguhkan dalam autentikasi berbasis token.
- Memperbaiki penguraian string koneksi yang berulang dalam alur autentikasi.
- Memperbaiki anotasi tipe
executemany()untuk input sekuens.
mssql-python 1.7.1
Tanggal rilis: Mei 2026
Enhancements
Cakupan roda yang diperluas dan peningkatan performa
Rilis ini menambahkan paket wheel yang kompatibel dengan RHEL 8, mengembalikan paket wheel macOS untuk Python 3.10 universal2, meningkatkan penanganan UTF-16 melalui simdutf, dan mengoptimalkan hot path execute().
Dampak performa: Kapasitas pemrosesan eksekusi batch meningkat sekitar ~15% pada beban kerja umum berkat pengoptimalan jalur eksekusi kritis pada metode execute().
Pemulihan kesalahan perangkat lunak
- Kegagalan login diperbaiki sehingga memunculkan
mssql_pythonpengecualian DB-API alih-alihRuntimeError. - Pelepasan GIL diperluas pada panggilan ODBC yang memblokir untuk eksekusi, pengambilan data, transaksi, dan atribut koneksi.
- Memperbaiki kegagalan
executemany()yang terjadi saat nilai desimal berganti tanda. - Memperbaiki decoding CP1252
VARCHARyang tidak konsisten di seluruh platform. - Memperbaiki
cursor.bulkcopy()kegagalan pada string kosong di kolomNVARCHAR(MAX)danVARCHAR(MAX).
Note
Versi 1.7.0 ditarik karena masalah publikasi. Gunakan versi 1.7.1 atau yang lebih baru.
mssql-python 1.6.0
Tanggal rilis: April 2026
Enhancements
Sanitasi string koneksi berbasis parser
Peningkatan ini memastikan penguraian karakter khusus secara tepat di bidang kata sandi dan nilai di dalam kurung kurawal.
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"
)
Sanitisasi string koneksi telah dipindahkan dari logika berbasis regex ke pemrosesan berbasis parser agar sintaks string koneksi ODBC ditangani dengan benar.
Pemulihan kesalahan perangkat lunak
- Memperbaiki pelepasan GIL selama memblokir operasi koneksi dan pemutusan ODBC.
- Memperbaiki kerusakan pada
setinputsizes()dengan petunjukSQL_DECIMALdanSQL_NUMERIC. - Memperbaiki perilaku yang salah
fetchone()untuk metode katalog ODBC. - Memperbaiki kesalahan status kursor yang tidak valid saat
reset_cursor=Falsedigunakan. - Memperbaiki
executemany()petunjuk tipe untuk urutan parameter berbasis mapping. - Menambahkan pelindung lintasan jalur untuk
setup_logging(log_file_path=...).
mssql-python 1.5.0
Tanggal rilis: April 2026
Fitur baru
Dukungan untuk mengambil data Apache Arrow
Tiga metode kursor baru menyediakan pengambilan data kolumnar berperforma tinggi melalui Arrow C Data Interface:
-
cursor.arrow()mengembalikanpyarrow.Tableyang lengkap. -
cursor.arrow_batch()mengembalikan satupyarrow.RecordBatch. -
cursor.arrow_reader()mengembalikan sebuahpyarrow.RecordBatchReaderuntuk streaming.
Implementasi ini menghindari pembuatan objek Python pada bagian kode yang paling sering dieksekusi untuk meningkatkan kinerja. Untuk dokumentasi lengkap, lihat Integrasi Apache Arrow.
Dukungan tipe sql_variant
Driver sekarang mendeteksi kolom sql_variant saat pengambilan data, menentukan tipe dasar yang mendasarinya, dan mengembalikan nilai Python dengan tipe yang benar, bukan byte mentah.
Note
sql_variant kolom menggunakan jalur pengambilan streaming, yang mungkin sedikit memengaruhi performa dibandingkan dengan kolom bertipe tetap.
Dukungan UUID asli
Pengaturan baru native_uuid mengontrol apakah UNIQUEIDENTIFIER kolom dikembalikan sebagai uuid.UUID objek (default) atau sebagai string huruf besar yang kompatibel dengan pyodbc. Konfigurasikan di tingkat modul atau per koneksi:
# 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)
Untuk informasi selengkapnya, lihat Konfigurasi modul.
Baris kelas ekspor publik
Kelas Row sekarang diekspor pada level teratas untuk anotasi tipe:
from mssql_python import Row
Pemulihan kesalahan perangkat lunak
- Memperbaiki deteksi positif palsu
?dalam identifier yang diapit tanda kurung, literal string, dan komentar. - Memperbaiki pengikatan parameter NULL untuk
VARBINARYkolom (tidak lagi menimbulkan kesalahan konversi implisit). - Memperbaiki masalah hilangnya mikrodetik pada nilai
datetime.timesaat konversi bolak-balik untuk kolomTIME(1)hinggaTIME(7). - Memperbaiki jalur fetch Arrow agar menyertakan pecahan detik dengan benar untuk kolom
TIME. - Memperbaiki masalah penyalinan massal dengan metode autentikasi Microsoft Entra ID (kolom kredensial usang tidak lagi menyebabkan kesalahan validasi).
- Instans kredensial Azure Identity yang di-cache di tingkat modul untuk meningkatkan performa autentikasi.
mssql-python 1.4.0
Tanggal rilis: Maret 2025
Fitur baru
Dukungan salinan massal
Pemuatan data massal berkinerja tinggi sekarang tersedia melalui 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")
Metode ini menerima opsi untuk batch_size, timeout, column_mappings, keep_identity, check_constraintstable_lockkeep_nullsfire_triggersdan .use_internal_transaction
Lihat Salinan massal untuk dokumentasi lengkap.
Improvements
- Pengoptimalan performa untuk kumpulan hasil besar.
- Mengurangi penggunaan memori selama operasi batch.
- Pesan kesalahan yang ditingkatkan untuk kegagalan salin massal.
mssql-python 1.3.0
Tanggal rilis: Januari 2025
Fitur baru
Kelas pengaturan
Konfigurasikan perilaku seluruh modul melalui kelas baru Settings :
import mssql_python
settings = mssql_python.get_settings()
settings.lowercase = True # Lowercase column names in cursor.description
Lihat Konfigurasi modul untuk detailnya.
Improvements
- Penanganan batas waktu koneksi yang lebih baik saat failover Azure SQL.
- Kompatibilitas yang ditingkatkan dengan Python 3.13.
mssql-python 1.2.0
Tanggal rilis: November 2024
Fitur baru
Metode penemuan skema
Metode kursor baru untuk eksplorasi metadata database:
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()
Lihat Penemuan skema untuk dokumentasi lengkap.
Improvements
- Peningkatan cache metadata untuk kueri skema yang berulang.
- Penanganan kolom komputasi yang lebih baik dalam
columns()hasil.
mssql-python 1.1.0
Tanggal rilis: September 2024
Fitur baru
Konverter keluaran khusus
Daftarkan fungsi kustom untuk mengubah nilai kolom selama pengambilan:
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)
Metode manajemen:
add_output_converter(sql_type, converter_func)get_output_converter(sql_type)remove_output_converter(sql_type)clear_output_converters()
Untuk dokumentasi lengkap, lihat Konverter jenis kustom.
Improvements
- Pesan kesalahan yang lebih baik untuk kegagalan konversi tipe.
- Dukungan untuk fungsi konverter yang mengembalikan
None.
mssql-python 1.0.0
Tanggal rilis: Juli 2024
Rilis GA awal
Rilis ketersediaan umum pertama mssql-python, driver Python asli Microsoft untuk SQL Server.
Fitur inti
- Arsitektur DDBC: Konektivitas Database Langsung tanpa memerlukan penginstalan driver ODBC.
- Kepatuhan terhadap DB-API 2.0: Antarmuka database Python standar.
- Pengumpulan koneksi: Manajemen kumpulan koneksi bawaan.
- Autentikasi Microsoft Entra: Dukungan penuh untuk autentikasi berbasis identitas Azure.
- Enkripsi TLS: Koneksi aman dengan validasi sertifikat.
Fitur koneksi
- 21 kata kunci string koneksi.
- 9 mode otentikasi (SQL, Windows, dan 7 metode Microsoft Entra ID).
- Kontrol penerapan otomatis.
- Metode eksekusi:
execute(),executemany(), danbatch_execute(). - Atribut koneksi melalui
set_attr()dangetinfo(). - Dukungan pengelola konteks.
Fitur kursor
- Metode pengambilan standar:
fetchone(),fetchmany(),fetchall(). - Metode yang diperluas:
fetchval(),skip(). - Metode eksekusi:
execute()danexecutemany(). - Objek baris dengan akses atribut dan indeks.
- Navigasi beberapa kumpulan hasil dengan
nextset().
Dukungan jenis data
- Semua tipe bawaan SQL Server.
- Pemetaan tipe Python↔SQL.
- Konstanta jenis SQL untuk pengetikan eksplisit (misalnya,
mssql_python.SQL_DECIMAL). - Penanganan nilai NULL di Python
None.
Dukungan transaksi
- Penerapan dan pengembalian manual.
- Mode komit otomatis.
- Kontrol tingkat isolasi.
- Deteksi dan penanganan kebuntuan.
Modus autentikasi
| Mode | Deskripsi |
|---|---|
| autentikasi SQL Server | Nama pengguna dan kata sandi |
| Autentikasi Windows | Trusted_Connection |
| ActiveDirectoryDefault | DefaultAzureCredential |
| ActiveDirectoryInteractive | Login berbasis browser |
| Kode Perangkat Active Directory | Alur kode perangkat |
| ActiveDirectoryPassword | Nama pengguna dan kata sandi Microsoft Entra (tidak digunakan lagi; menggunakan ROPC) |
| ActiveDirectoryMSI | Identitas yang dikelola |
| ActiveDirectoryServicePrincipal | Service principal |
| Terintegrasi dengan Active Directory | Windows Kerberos |
Upgrade
Dari pyodbc
Untuk panduan migrasi terperinci, lihat Bermigrasi dari pyodbc.
Perbedaan utama:
- Baik gaya parameter
?(qmark) maupun%(name)s(pyformat) didukung. Kueri Anda yang sudah ada?tetap berfungsi tanpa perubahan. - Tidak ada metode
callproc(). GunakanEXECUTEpernyataan sebagai gantinya. - Pool koneksi bawaan.
- Tidak ada dependensi driver ODBC eksternal.
Dari pymssql
Untuk panduan migrasi terperinci, lihat Bermigrasi dari pymssql.
Perbedaan utama:
- Ganti
%sdan%dparameter penanda dengan?atau%(name)s. - Gunakan string koneksi alih-alih argumen posisi.
- Tidak ada dependensi FreeTDS.
- Beberapa kursor simultan per koneksi.
- Objek baris dengan akses atribut mengganti
as_dict=True.
Antara versi mssql-python
Tingkatkan driver untuk mendapatkan fitur dan perbaikan baru.
pip install --upgrade mssql-python
Periksa catatan rilis untuk mengetahui perubahan yang merusak sebelum memutakhirkan sistem produksi.
Peta strategi
Untuk fitur mendatang dan peta jalan pengembangan, lihat repositori GitHub.