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.12.0

Tanggal rilis: Juli 2026

Enhancements

Paket pendamping mandiri mssql-python-odbc

Biner driver ODBC yang dibutuhkan mssql-python saat runtime kini juga diterbitkan sebagai paket pendamping terpisah yang hanya berisi data: mssql-python-odbc (nama impor mssql_python_odbc, saat ini dipatok ke versi 18.6.2). Paket mssql-python mendeklarasikan mssql-python-odbc==18.6.2 dalam install_requires, sehingga pip install mssql-python secara transparan menginstal paket pendamping bersamaan dengannya. Tidak diperlukan perubahan kode.

Pemuat native lebih memilih paket eksternal mssql_python_odbc jika tersedia, dan akan beralih ke biner ODBC yang masih dibundel di dalam wheel mssql-python jika paket tersebut tidak tersedia. Mekanisme fallback ini aman dengan Python Global Interpreter Lock (GIL) dan berfungsi pada distribusi Linux berbasis musl seperti Alpine.

Pembagian ini memungkinkan Anda mempin atau memperbarui binari driver secara independen dari kode Python, memberikan roda yang lebih kecil mssql-python bagi redistributor seiring waktu, dan menghindari masalah kepemilikan duplikat dari file ODBC yang dibundel.

Penting

Ini membagi kapal tanpa perubahan yang berubah. Pada rilis besar mendatang (v2.0.0), pohon bundel libs/ mungkin akan dihapus, sehingga mssql-python-odbc menjadi persyaratan runtime yang keras.

Pemulihan kesalahan perangkat lunak

cursor.bulkcopy() sekarang menggunakan waktu tunggu penyambungan koneksi induk

Operasi penyalinan massal membuka koneksi terpisah melalui ekstensi asli mssql_py_core. Sebelumnya, operasi ini selalu menggunakan batas waktu koneksi 15 detik yang ditetapkan secara hardcoded tanpa opsi untuk menimpanya dari Python. Jika Anda mengatur timeout koneksi pada koneksi induk (connect(..., timeout=<seconds>)), bulkcopy() sekarang meneruskan nilai tersebut ke koneksi internal. Pengaturan timeout=0 mempertahankan perilaku tanpa penggantian dan tetap menggunakan nilai bawaan internal 15 detik. Waktu tunggu kursor pada saat pemanggilan bulkcopy() digunakan untuk operasi tersebut, sehingga perubahan selanjutnya pada koneksi induk tidak memengaruhi operasi penyalinan massal yang sedang berlangsung.

Contoh berikut menggunakan Production.Culture tabel pencarian dari database contoh AdventureWorks . Sesuaikan string koneksi dan nama database untuk lingkungan Anda:

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() mendukung kolom tipe CLR yang didefinisikan pengguna

Sebelumnya, cursor.bulkcopy() gagal dengan Protocol Error: Unsupported TDS type for bulk copy: 0xF0 untuk setiap kolom tujuan yang menggunakan tipe yang ditentukan pengguna CLR (Common Language Runtime), termasuk tipe bawaan geography, geometry, dan hierarchyid, serta CLR UDT kustom apa pun yang didaftarkan pada assembly. Jalur kabel asli mssql_py_core tidak memiliki handler untuk token tipe UDT (0xF0) dan mengalami kesalahan saat menulis metadata kolom, sebelum baris apa pun dikirim. Kolom CLR UDT sekarang dipetakan ke varbinary(max) melalui wire, dan byte yang diberikan dialirkan sebagai payload milik UDT IBinarySerialize, sesuai dengan cara pyodbc dan python-tds memuat kolom UDT. SQL Server mematerialisasi UDT saat penyisipan. Disampaikan melalui mssql_py_core peningkatan versi dari 0.1.6 ke 0.1.7.

Contoh berikut mengarsipkan kolom organ-chart dari HumanResources.Employee (kolom hierarchyid, salah satu CLR UDT bawaan SQL Server) ke dalam tabel baru. Dalam alur kerja nyata, byte UDT mungkin berasal dari instance SQL Server lain, file yang diserialkan, atau output IBinarySerialize.Write() dari tipe CLR Anda; contoh ini membacanya dari sebuah kolom yang sudah ada melalui CAST(... AS varbinary(max)) agar contoh ini dapat berdiri sendiri. Penyalinan massal mencakup baris yang nilai OrganizationNode-nya adalah 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")

Untuk CLR UDT kustom yang terdaftar di assembly, gunakan tipe tersebut di tabel tujuan dan berikan byte-byte yang dihasilkan oleh metode IBinarySerialize.Write() milik tipe tersebut.

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 Kepala layanan
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.