Apa yang baru di mssql-python

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() dan cursor.close()) dan di SQLDescribeParam untuk parameter bernilai None dalam konfigurasi terowongan SSH dan forwarder dalam proses.
  • Memperbaiki parameter NULL BINARY dan VARBINARY pada tabel sementara dan variabel tabel. Ketika resolusi jenis otomatis gagal, driver sekarang memancarkan peringatan Python dengan panduan eksplisit.cursor.setinputsizes()
  • Memperbaiki masalah import mssql_python yang gagal pada Apple Silicon dengan instalasi bersih (regresi pada versi 1.8.0). Dependensi dylib ODBC yang disertakan kini telah ditulis ulang untuk arsitektur arm64 dan x86_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 VARCHAR dan CHAR di 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 simdutf selalu terhubung secara statis.
  • Memperbaiki sisipan besar DECIMAL di executemany().
  • Memperbaiki fallback tipe yang keliru untuk parameter NULL.
  • Memperbaiki round-trip pickle dan unpickle pada pengecualian.
  • Diperbaiki nextset() sehingga mempertahankan PRINT pesan di seluruh kumpulan hasil.
  • Memperbaiki penanganan Row pada jalur fallback executemany() 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_python pengecualian DB-API alih-alih RuntimeError.
  • 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 VARCHAR yang tidak konsisten di seluruh platform.
  • Memperbaiki cursor.bulkcopy() kegagalan pada string kosong di kolom NVARCHAR(MAX) dan VARCHAR(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 petunjuk SQL_DECIMAL dan SQL_NUMERIC.
  • Memperbaiki perilaku yang salah fetchone() untuk metode katalog ODBC.
  • Memperbaiki kesalahan status kursor yang tidak valid saat reset_cursor=False digunakan.
  • 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() mengembalikan pyarrow.Table yang lengkap.
  • cursor.arrow_batch() mengembalikan satu pyarrow.RecordBatch.
  • cursor.arrow_reader() mengembalikan sebuah pyarrow.RecordBatchReader untuk 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 VARBINARY kolom (tidak lagi menimbulkan kesalahan konversi implisit).
  • Memperbaiki masalah hilangnya mikrodetik pada nilai datetime.time saat konversi bolak-balik untuk kolom TIME(1) hingga TIME(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(), dan batch_execute().
  • Atribut koneksi melalui set_attr() dan getinfo().
  • Dukungan pengelola konteks.

Fitur kursor

  • Metode pengambilan standar: fetchone(), fetchmany(), fetchall().
  • Metode yang diperluas: fetchval(), skip().
  • Metode eksekusi: execute() dan executemany().
  • 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(). Gunakan EXECUTE pernyataan sebagai gantinya.
  • Pool koneksi bawaan.
  • Tidak ada dependensi driver ODBC eksternal.

Dari pymssql

Untuk panduan migrasi terperinci, lihat Bermigrasi dari pymssql.

Perbedaan utama:

  • Ganti %s dan %d parameter 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.