mssql-django'daki yenilikler

Bu makalede, Django veritabanı arka ucu her sürümündeki mssql-django yeni özellikler, iyileştirmeler ve değişiklikler açıklanmaktadır.

Sürüm 2.0

Çıkış tarihi: Eylül 2026

Sürüm 2.0, veritabanı başına pyodbcalternatif olarak Microsoft'un mssql-python sürücüsünü ekler, desteklenen Python, Django ve SQL Server matrisini ileri taşır ve uyumluluk ile güvenilirlik düzeltmeleri getirir. pyodbc varsayılan sürücü olarak kalır.

Öne Çıkanlar

  • mssql-python sürücü desteği: Bir veritabanı takma adı, OPTIONS sözlüğünde "python_driver": "mssql_python" ile etkinleştirilir. Sürücü; bağlantıları, bağlantı havuzunu, yeniden denemeleri, işlemleri ve geri alma noktalarını, datetimeoffset değerlerini, iç gözlemi ve Microsoft Entra kimlik doğrulamasını kapsar. Bu seçeneği belirtmeyen takma adlar pyodbc kullanmaya devam eder, yani siz etkinleştirene kadar hiçbir şey değişmez. Daha fazla bilgi için, mssql-django için veritabanı sürücüsünü seç sayfasına bakınız.
  • mssql-python yolunda ayrı bir ODBC sürücüsü kurulumu yok: Bir alias için mssql-python SQL Server için harici olarak yüklenmiş Microsoft ODBC Sürücüsü gerekmez. pyodbc üzerinde kalan takma adlar hâlâ öyle kalır.
  • Modernize destek matrisi: Python 3.10'dan 3.14'e, Django 5.2'den 6.1'e ve SQL Server 2017'den 2025'e kadar. Django 6.0 ve daha sonraki sürümler Python 3.12 veya daha yeni bir sürüm gerektirir.

Hata düzeltmeleri

  • Açıkça belirtilen MARS ayarları geçerli sayılır: extra_params içindeki açık bir MARS_Connection değeri, Windows’un varsayılan değeriyle üzerine yazılmak yerine korunur ve eşleşmede büyük/küçük harf dikkate alınmaz. MARS_Connection=no ayarı artık Microsoft Fabric Warehouse dahil MARS'ı reddeden uç noktalarında da çalışıyor. MARS devre dışıyken, iç içe sorgunun bağlantıyı yeniden kullanabilmesi için ORM yineleme işlemi sonuçları döndürmeden önce arabelleğe alır; bu da büyük sorgu sonuç kümelerinde daha fazla bellek kullanımına yol açar. Bu bağlantı düzeltmesi, göçler veya diğer SQL Server özellikleri için tam Warehouse desteği eklemez.
  • Parantez joker kartları ifade aramalarında kaçar: Bir ifade ile iki alanı F() karşılaştıran desen araştırmaları, örneğin contains ve startswith, SQL Server [ joker kartından kaçar. Parantez karakterleri, joker sözdizimi yerine veri olarak eşleştirilir.
  • inspectdb şema adlarındaki tırnak işaretleri kaçışlanır: inspectdb --schema değerindeki tek bir tırnak, meta veri sorgusunda kaçışlanır; böylece tırnak içeren şema adları artık hatalı biçimlendirilmiş Transact-SQL (T-SQL) üretmez.
  • Boş bir HOST, mssql-python yolunda localhost'a bağlanır: Django'nun boş bir dizeyle doldurduğu atlanan HOST, boş bir localhost değeriyle doğrulamadan geçememesi gerekirken SERVER= olarak çözümlenir. Bu davranış, yerel örnekler için varsayılan ile pyodbc eşleşir.

Improvements

  • pytz yerine zoneinfo ve tzdata kullanıldı: Saat dilimi işleme, standart kitaplıktaki zoneinfo modülünü kullanır; tzdata paketi ise Windows ve minimal konteyner imajları gibi yerleşik olarak IANA saat dilimi veritabanı içermeyen ortamlarda bu veritabanını sağlar. Yaz saati uygulamasında negatif fark bulunan bölgelerde farklar yıl boyunca doğru kalır. pytz artık bağımlılık değil.
  • Daha yeni SQL Server sürümleri kabul edilir: Backend'in tanımadığı bir SQL Server ana sürümü, sürüm doğrulamada başarısız olmak yerine backend'in bildiği en son yetenek setini kullanır. Eşleşen mssql-django bir sürüm çıkmadan önce yeni bir SQL Server sürümüne bağlanabilirsiniz. Bağlantıyı kabul etmek, test edilmemiş özellikleri desteklenmiş olarak ilan etmez.

Kritik değişiklikler

  • Python 3.8 ve 3.9 ile Django 3.2'den 5.1'e kadar artık desteklenmiyor. Önceki sürümler için uyumluluk kodu hâlâ yerinde kalıyor, ancak bu kombinasyonlar test edilmiyor veya listelenmiyor.
  • mssql-python 1.15.0 veya daha sonrası, bir takma ad kullansa pyodbcbile zorunlu bir bağımlılıktır. Kurulum, ARM64 üzerinde SUSE Linux hariç tutulan uyumlu mssql-python dağıtıma sahip platformlarla sınırlıdır. Diğer platformlardaki projeler ise 1.8.0 sürümünde kalır.
  • Bildirilen SQL Server desteği SQL Server 2017 ile başlar ve yerel bağlantı desteği Microsoft ODBC Driver 17 ve Microsoft ODBC Driver 18 ile sınırlıdır.

Sürüm 1.8.0

Çıkış tarihi: Ağustos 2026

Sürüm 1.8.0, Django 6.1 için destek eklerken Django 3.2'den 6.0'a kadar olan sürümleri desteklemeye devam etmektedir. Bir projeyi Django 6.0'dan 6.1'e taşımak, bu bölümde açıklanan iki Django 6.1 özelliğinden birini kullanmadıkça kod değişikliği gerektirmez.

Öne Çıkanlar

  • Django 6.1 desteği: Django 6.1'e karşı onaylandı ve Django 3.2'den 6.0'a kadar destek olmaya devam etti. Bağımlılık kısıtlaması 'den django>=3.2,<6.1 'ye django>=3.2,<6.2genişler.
  • Django 6.1'de sorgu derleyicisi quote_namekullanıyor: Django 6.1 kullanımdan quote_name_unless_aliaskaldırıldı. Arka uç artık Django 6.1 ve sonraki sürümlerde SQLCompiler.quote_name çağrısı yapıyor; bu, sürüme göre koşullandırıldığı için önceki Django sürümleri değişmeden kalıyor. Dilimlenmiş ve kaydırmalı sorgular, örneğin qs[a:b] ve OFFSET ... FETCH, kullanımdan kaldırma uyarıları olmadan derlenir.
  • Yabancı anahtar iç gözlemi ON DELETE kuralını döndürür: Django 6.1, DELETE ögesini veritabanı düzeyindeki ON get_relations() kuralını da içerecek şekilde genişletti. Arka uç, beklenen üç parçalı yapıyı döndürür ve SQL Server NO ACTION yabancı anahtarlarını buna uygun şekilde eşler; böylece inspectdb ile yabancı anahtar incelemesi doğru modeller üretir.

Desteklenmeyen Django 6.1 özellikleri

Bu arka uçta farklı nedenlerle iki Django 6.1 eklemesi mevcut değildir:

  • Veritabanı düzeyinde referans işlemleri (DB_CASCADE, DB_SET_NULL, DB_SET_DEFAULT): SQL Server, aynı tabloya birden fazla kaskad yola sahip yabancı anahtar grafikleri reddeder (1785 hatası), yani bu özellik için hiçbir SQL Server sürümünde yerel yol yoktur. Bu değerlerden birini kullanmak, Django sistem kontrolünü fields.E324artırır ve bu da sizi standart Django seviyesine on_deleteyönlendirir.
  • Bit düzeyinde toplamalar (BitAnd, BitOr, BitXor): SQL Server'ın yerleşik bit düzeyinde toplama işlevi yoktur ve arka uç bunları öykünmez, bu nedenle bu toplamalar NotSupportedError hatası verir.

Daha fazla bilgi için bkz. mssql-django'da sınırlamalar ve desteklenmeyen özellikler.

Sürüm 1.7.4

Çıkış tarihi: Temmuz 2026

Sürüm 1.7.4, ham ve açıklamalı GROUP BY sorgu işleme için iki düzeltme içeren geriye dönük uyumlu bir yama sürümüdür.

Hata düzeltmeleri

  • IndexError escape edilmiş GROUP BY ve gerçek parametreler içeren %% sorgularında: Daha önce, GROUP BY yan tümcesi içeren herhangi bir sorgu, %\w+ ile eşleşip bunu {} ile değiştiren bir yer tutucuları yeniden yazma adımından geçiyordu. Bu regex ayrıca kaçışlı %% değişmezlerini de eşleştiriyordu; bu da sahte yer tutucular ekliyor ve bir sorgu IndexError: Replacement index N out of range kaçışı ile gerçek bir %% parametresini birleştirdiğinde %s hatasına yol açıyordu. Daraltılmış regex artık yalnızca %%'a (aynen korunur) ve %s'e (gerçek yer tutucu) dokunur; derleyicinin ürettiği tek desen de budur. Aynı düzeltme, ayrıca parametresiz bir sorguda LIKE '%abc%' gibi kaçırılmamış bir desenin LIKE '{}%' olarak yeniden yazılmasına ve yanlış satırların döndürülmesine yol açan, bununla ilgisiz sessiz bir hatayı da önler.
  • Ham NotImplementedError sorgularında IntegerChoices için GROUP BY: Daha önce, IntegerChoices yan tümcesi içeren bir ham sorguya GROUP BY değeri geçirilmesi NotImplementedError: Not supported type <enum ...> hatasına neden oluyordu. Parametre tipleme yardımcısı tam tip kontrolleri (typ == int), kullandı ve type(IntegerChoices_value) enum sınıfı değil int, bu yüzden değer alt sınıflara intsahip olmasına rağmen artışa geçti. Tür denetimleri artık isinstance kullanır ve bool dalı, int dalından önce değerlendirilir (çünkü bool, kendisi bir int alt sınıfıdır). Enum seçimleri artık doğru şekilde bağlanıyor, bool hala BITbağlıyor ve sade int ise değişmiyor.

Sürüm 1.7.3

Yayın tarihi: Haziran 2026

Sürüm 1.7.3, iki bağlantı ve çalışma zamanı düzeltmesi içeren geriye dönük uyumlu bir yama sürümüdür.

Hata düzeltmeleri

  • FA001 dışındaki Authentication= modları için ActiveDirectoryMsi: Daha önce, arka uç Trusted_Connection=yes öğesini yalnızca ActiveDirectoryMsi için atlıyordu. USER değeri sağlamayan diğer Entra modları (örneğin, ActiveDirectoryIntegrated, ActiveDirectoryDefault, ActiveDirectoryDeviceFlow) yine de ODBC sürücüsünün Trusted_Connection=yes (FA001) ile reddettiği Cannot use Authentication option with Integrated Security option değerini aldı. Düzeltme, sınırları gözeten ve büyük/küçük harf duyarsız bir eşleşmeyle açıkça belirtilmiş herhangi bir Authentication= değerini algılar ve hem Trusted_Connection hem de Integrated Security=SSPI değerlerini atlar. Parola işleme değişmemiştir: SqlPassword, ActiveDirectoryPassword ve ActiveDirectoryServicePrincipal, PWD göndermeye devam ederken ActiveDirectoryInteractive bunu göndermemeye devam eder.
  • KeyError alt sınıflardaDatabaseWrapper: Önbelleğe alınan sql_server_version ve to_azure_sql_db özellikleri, bir type(self).__dict__ alt sınıfın cached_propertybunlara ilk kez eriştiğinde (1.7.1'de ortaya çıkan bir regresyon) yükselten KeyError girişine dayanırDatabaseWrapper. Düzeltme, _known_versions üzerinden erişilen açık sınıf düzeyi sözlükleri (_known_azures, self.) kullanır; böylece arama MRO üzerinden çözümlenir ve alt sınıftan türetilmiş sarmalayıcılar doğru şekilde çalışır.

Sürüm 1.7.2

Yayın tarihi: Mayıs 2026

Sürüm 1.7.2, saat dilimi ve uyumluluk düzeltmeleriyle geriye dönük uyumlu bir yama sürümüdür.

Hata düzeltmeleri

  • .explain() Django 4.0 ve üzeri için uyumluluk: Artık Django 4.0 ve üzeri sürümlerde .explain() başarısız olmaması için Django'nun açıklama meta verilerinin AttributeError derleyici tarafından işlenmesi düzeltildi. Arka uç artık sürüme uygun açıklama alanlarını izler ve gerektiğinde doğru şekilde yükseltir NotSupportedError .
  • datetimeoffset saat dilimi işleme: datetimeoffset ayrıştırması, saat dilimi ofsetleri yok sayılmak yerine korunacak şekilde düzeltildi. Döndürülen tarih-saat değerleri artık gerektiğinde zaman dilimi bilgisine sahiptir.
  • Now() ile USE_TZ=True: Saat dilimi desteği etkinleştirildiğinde saat dilimi farkındalığına sahip davranışı kullanacak şekilde Now() için SQL oluşturma güncellendi; böylece UTC dışındaki SQL Server konaklarında zaman damgası kayması önlenir.

Sürüm 1.7.1

Yayın tarihi: Nisan 2026

Sürüm 1.7.1, hata düzeltmelerine sahip geriye dönük uyumlu bir yama sürümüdür.

Hata düzeltmeleri

  • FieldDoesNotExist azalan dizin sıralamasına sahip alanlar değiştirilirken: Dizin alan adları çözümlenirken, _alter_field() içindeki schema.py, index.fields_orders yerine index.fields kullanacak şekilde düzeltildi. Önceki kod, sıralama içeren ham alan dizelerini (örneğin, "-pub_date") model._meta.get_field() öğesine geçiriyordu; bu da FieldDoesNotExist hatasına neden oluyordu. Artık yalnızca alan adı çıkarılır ve sıralama eki doğru şekilde göz ardı edilir.
  • Microsoft Fabric desteğindeki SQL veritabanı (EngineEdition 12): Azure sürümü olarak Fabric'de (EngineEdition=12) tanınan SQL veritabanı. Daha önce Fabric'in motor sürümü tanınmıyordu; bu da to_azure_sql_db öğesinin False döndürmesine ve özellik geçidi kontrollerinin başarısız olmasına neden oluyordu. Düzeltme, EDITION_AZURE_SQL_FABRIC=12 öğesine _AZURE_EDITIONS ekler ve Fabric’i desteklenen en son SQL Server sürümüyle eşler. JSONField, karma fonksiyonları, harmanlama incelemesi ve test veritabanının kaldırılması artık Fabric'te düzgün şekilde çalışıyor.

Sürüm 1.7

Sürüm tarihi: Mart 2026

Öne Çıkanlar

  • Django 6.0 desteği: 3.12 veya üzeri Python gerektiren Django 6.0 ile tam uyumluluk. Tüm 6.0 API değişiklikleri arka uç tarafından saydam bir şekilde işlenir.
  • Kısmi CompositePrimaryKey destek: Arka uç, Django 5.2 CompositePrimaryKeyiçin kısmi destek ekler. Alt sorgulara karşı demet karşılaştırması Django 5.2.4 veya daha yeni bir sürüm gerektirir ve bazı bileşik anahtar ve JSONField uç durumları devam etmektedir. Django 5.2 ilk olarak mssql-django 1.6'da desteklendi.
  • SQL Server 2025 desteği: SQL Server 2025'e karşı doğrulandı.
  • ODBC Sürücüsü 18 varsayılanı: Arka uç artık SQL Server için ODBC Sürücüsü 18 olarak varsayılandır ve sürüm 18 yüklü değilse ODBC Sürücüsü 17'ye otomatik geri döner.

Sürüme özgü notlar

Django sürümü Notlar
Django 5.1 inspectdb bileşik birincil anahtarlarla tabloları inceleyebilir, ancak bunlar için tam model tanımları oluşturmaz.
Django 5.2 CompositePrimaryKey desteği kısmidir. Alt sorgulara karşı demet karşılaştırması için Django 5.2.4 veya daha yenisi gerekir ve bazı geçiş ile JSONField uç durumları hâlâ mevcuttur.
Django 6.0 3.12 veya sonraki Python gerektirir. Tüm 5.2 sınırlamaları geçerlidir.

Sürüm 1.6

Sürüm tarihi: Ağustos 2025

  • Django 5.1 ve 5.2 desteği eklendi.
  • Gelişmiş JSON işlevselliği ve geriye dönük uyumluluk.
  • geliştirilmiş işlem hattı altyapısı.

Sürüm 1.5

Yayın tarihi: Nisan 2024

  • supports_comments için db_comments özellik bayrağı eklendi.
  • AutoField, parametre biçimlendirmesi ve şema sorguları için hata düzeltmeleri.

Sürüm 1.4

Yayın tarihi: Ocak 2024

  • Django 5.0 desteği eklendi.
  • db_comment desteği eklendi.
  • Tarih/saat dönüştürmeleri ve boş toplamlar için hata düzeltmeleri.

Sürüm 1.3

Yayın tarihi: Mayıs 2023

  • Django 4.2 desteği eklendi.
  • Büyük/küçük harfe duyarlı Replace işlev desteği eklendi.
  • OFFSET işlemesi ve sola doldurma ile ilgili hata düzeltmeleri.

Sürüm 1.2

Yayın tarihi: Aralık 2022

  • Django 4.1 desteği eklendi.
  • datetimeoffsetUSE_TZ=True ile saat dilimi desteği eklendi.
  • Toplu ekleme kimliği alma için return_rows_bulk_insert seçeneği eklendi.
  • SQL Server 2022 desteği eklendi.
  • Azure SQL Yönetilen Örneği desteği eklendiJSONField.

Sürüm 1.1

Yayın tarihi: Temmuz 2022

  • Django 3.2 ve 4.0 desteği.
  • SQL Server 2016 ve üzeri ve Azure SQL Veritabanı desteği.
  • pyodbctabanlı bağlantı.