Apa yang baru dalam mssql-django

Artikel ini menjelaskan fitur, peningkatan, dan perubahan baru di setiap versi mssql-django backend database Django.

Versi 1.7.4

Tanggal rilis: Juli 2026

Versi 1.7.4 adalah rilis patch yang kompatibel dengan versi sebelumnya dengan dua perbaikan untuk penanganan kueri mentah dan beranotasi GROUP BY.

Pemulihan kesalahan perangkat lunak

  • IndexError pada GROUP BY kueri dengan %% yang di-escape dan parameter nyata: Sebelumnya, setiap kueri dengan klausa GROUP BY melalui langkah penulisan ulang placeholder yang mencocokkan %\w+ dan menggantinya dengan {}. Regex itu juga mencocokkan literal %% yang di-escape, yang menyisipkan placeholder semu dan memicu IndexError: Replacement index N out of range setiap kali kueri menggabungkan escape %% dengan parameter %s yang sebenarnya. Regex yang dipersempit sekarang hanya memproses %% (dipertahankan secara verbatim) dan %s (placeholder yang sebenarnya), yang merupakan satu-satunya pola yang pernah dihasilkan oleh kompiler. Perbaikan yang sama juga mencegah bug senyap lain yang tidak terkait, ketika pola yang tidak di-escape seperti LIKE '%abc%' dalam kueri tanpa parameter ditulis ulang menjadi LIKE '{}%' dan mengembalikan baris data yang salah.
  • NotImplementedError untuk IntegerChoices dalam kueri mentah GROUP BY: Sebelumnya, meneruskan nilai IntegerChoices ke kueri mentah yang berisi klausa GROUP BY menyebabkan NotImplementedError: Not supported type <enum ...>. Helper pengetikan parameter menggunakan pemeriksaan tipe yang eksak (typ == int), dan type(IntegerChoices_value) merupakan kelas enum, bukan int, sehingga nilainya tetap memicu raise meskipun merupakan subclass dari int. Pemeriksaan tipe sekarang menggunakan isinstance, dan cabang bool dievaluasi sebelum cabang int (karena bool sendiri merupakan subkelas dari int). Pilihan Enum sekarang mengikat dengan benar, bool tetap mengikat, BITdan polos int tidak berubah.

Versi 1.7.3

Tanggal rilis: Juni 2026

Versi 1.7.3 adalah rilis patch yang kompatibel dengan versi sebelumnya, dengan dua perbaikan pada koneksi dan runtime.

Pemulihan kesalahan perangkat lunak

  • FA001 untuk Authentication= mode selain ActiveDirectoryMsi: Sebelumnya, backend hanya melewati Trusted_Connection=yes untuk ActiveDirectoryMsi. Mode Entra lainnya yang tidak menyediakan nilai USER (misalnya, ActiveDirectoryIntegrated, ActiveDirectoryDefault, ActiveDirectoryDeviceFlow) tetap menerima Trusted_Connection=yes, yang ditolak oleh driver ODBC dengan galat FA001 (Cannot use Authentication option with Integrated Security option). Perbaikan ini mendeteksi nilai Authentication= eksplisit apa pun dengan pencocokan yang memperhatikan batas kata dan tanpa membedakan huruf besar dan kecil, serta melewati Trusted_Connection dan Integrated Security=SSPI. Penanganan kata sandi tidak berubah: SqlPassword, , ActiveDirectoryPassworddan ActiveDirectoryServicePrincipal terus mengirim PWD, sambil ActiveDirectoryInteractive terus menghilangkannya.
  • KeyError pada DatabaseWrapper yang disubkelaskan: properti sql_server_version dan to_azure_sql_db yang di-cache bergantung pada introspeksi type(self).__dict__ terhadap cached_property, yang memunculkan KeyError saat subkelas DatabaseWrapper pertama kali mengaksesnya (regresi yang diperkenalkan pada 1.7.1). Perbaikan menggunakan dict tingkat kelas eksplisit (_known_versions, _known_azures) yang diakses melalui self., sehingga pencarian diselesaikan melalui MRO dan pembungkus subkelas bekerja dengan benar.

Versi 1.7.2

Tanggal rilis: Mei 2026

Versi 1.7.2 adalah rilis patch yang tetap kompatibel dengan versi sebelumnya, dengan perbaikan zona waktu dan kompatibilitas.

Pemulihan kesalahan perangkat lunak

  • .explain() Kompatibilitas untuk Django 4.0 dan yang lebih baru: Memperbaiki penanganan kompilator metadata penjelasan Django sehingga .explain() tidak lagi gagal dengan AttributeError pada Django 4.0 dan yang lebih baru. Sistem backend kini mengikuti field explain yang sesuai dengan versinya dan memunculkan NotSupportedError dengan benar saat diperlukan.
  • penanganan zona waktu pada datetimeoffset: Penguraian datetimeoffset telah diperbaiki sehingga offset zona waktu dipertahankan alih-alih dihapus. Datetime yang dikembalikan sekarang menyertakan zona waktu jika diharapkan.
  • Now() dengan USE_TZ=True: Memperbarui pembuatan SQL untuk Now() menggunakan perilaku sadar zona waktu saat dukungan zona waktu diaktifkan, mencegah penyimpangan tanda waktu pada host SQL Server non-UTC.

Versi 1.7.1

Tanggal rilis: April 2026

Versi 1.7.1 adalah rilis patch yang tetap kompatibel dengan versi sebelumnya disertai perbaikan bug.

Pemulihan kesalahan perangkat lunak

  • FieldDoesNotExist saat mengubah field dengan urutan indeks menurun: Memperbaiki _alter_field() di schema.py agar menggunakan index.fields_orders alih-alih index.fields saat menentukan nama field indeks. Kode sebelumnya meneruskan string field-with-ordering mentah (misalnya, "-pub_date") ke model._meta.get_field(), yang menaikkan FieldDoesNotExist. Sekarang hanya nama kolom yang diekstrak, dan akhiran pengurutan dibuang dengan benar.
  • Dukungan database SQL di Microsoft Fabric (EngineEdition 12): Mengenali database SQL di Fabric (EngineEdition=12) sebagai edisi Azure. Sebelumnya, edisi engine Fabric tidak dikenali, sehingga to_azure_sql_db mengembalikan False dan pemeriksaan feature-gate gagal. Perbaikan ditambahkan EDITION_AZURE_SQL_FABRIC=12 ke _AZURE_EDITIONS dan memetakan Fabric ke versi SQL Server terbaru yang didukung. JSONField, fungsi hash, introspeksi kolasi, dan pembongkaran basis data pengujian kini berfungsi dengan benar di Fabric.

Versi 1.7

Tanggal rilis: Maret 2026

Sorotan

  • Dukungan Django 6.0: Kompatibilitas penuh dengan Django 6.0, yang memerlukan Python 3.12 atau yang lebih baru. Semua perubahan API 6.0 ditangani secara transparan oleh backend.
  • Dukungan parsialCompositePrimaryKey: Backend menambahkan dukungan parsial untuk Django 5.2 CompositePrimaryKey. Perbandingan tuple terhadap subkueri memerlukan Django 5.2.4 atau versi yang lebih baru, dan beberapa kasus tepi terkait kunci komposit dan JSONField masih ada. Django 5.2 sendiri pertama kali didukung di mssql-django 1.6.
  • Dukungan SQL Server 2025: Telah divalidasi untuk SQL Server 2025.
  • ODBC Driver 18 default: Backend sekarang menggunakan ODBC Driver 18 sebagai default untuk SQL Server, dengan fallback secara otomatis ke ODBC Driver 17 jika versi 18 tidak diinstal.

Catatan khusus versi

Versi Django Notes
Django 5.1 inspectdb dapat memeriksa tabel dengan kunci primer komposit, tetapi tidak menghasilkan definisi model lengkap untuk mereka.
Django 5.2 CompositePrimaryKey dukungan bersifat parsial. Perbandingan tuple terhadap subkueri memerlukan Django 5.2.4 atau yang lebih baru, dan beberapa migrasi ditambah JSONField kasus tepi tetap ada.
Django 6.0 Memerlukan Python 3.12 atau yang lebih baru. Semua batasan 5.2 berlaku.

Versi 1.6

Tanggal rilis: Agustus 2025

  • Menambahkan dukungan Django 5.1 dan 5.2.
  • Fungsionalitas JSON yang ditingkatkan dan kompatibilitas ke belakang.
  • Infrastruktur pipeline yang ditingkatkan.

Versi 1.5

Tanggal rilis: April 2024

  • Menambahkan feature flag supports_comments untuk db_comments.
  • Perbaikan bug untuk AutoField, pemformatan parameter, dan kueri skema.

Versi 1.4

Tanggal rilis: Januari 2024

  • Menambahkan dukungan Django 5.0.
  • Menambahkan dukungan db_comment.
  • Perbaikan bug untuk konversi tanggal/waktu dan agregat kosong.

Versi 1.3

Tanggal rilis: Mei 2023

  • Menambahkan dukungan Django 4.2.
  • Menambahkan dukungan fungsi peka huruf besar/kecil Replace .
  • Perbaikan bug untuk penanganan OFFSET dan padding kiri.

Versi 1.2

Tanggal rilis: Desember 2022

  • Menambahkan dukungan Django 4.1.
  • Menambahkan dukungan zona waktu (datetimeoffset dengan USE_TZ=True).
  • Menambahkan opsi return_rows_bulk_insert untuk pengambilan ID penyisipan massal.
  • Menambahkan dukungan SQL Server 2022.
  • Menambahkan dukungan JSONField untuk Azure SQL Managed Instance.

Versi 1.1

Tanggal rilis: Juli 2022

  • Dukungan Django 3.2 dan 4.0.
  • SQL Server 2016 dan yang lebih baru, serta dukungan Azure SQL Database.
  • konektivitas berbasis pyodbc.