mssql-django Sık Sorulan Sorular

Bu makale, SQL Server, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği ve Microsoft Fabric'deki SQL veritabanı için mssql-django Django arka ucu hakkında sık sorulan soruları yanıtlamaktadır.

General

mssql-django nedir?

mssql-django paketi, SQL Server için Microsoft tarafından sürdürülen bir Django veritabanı arka uç bileşenidir. Django uygulamalarının SQL Server, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği ve Microsoft Fabric'teki SQL veritabanına bağlanmasına olanak tanır. 2.0 ve sonraki sürümler ya pyodbc varsayılan sürücü ile ya da Microsoft'un mssql-python sürücüsüyle bağlanır.

Pip ile yükleyin:

pip install mssql-django

mssql-django hangi Django sürümlerini destekler?

Paket mssql-django 2.0 sürümü Django 5.2, 6.0 ve 6.1'i destekler. Django 3.2'den 5.1'e kadar olan projeler 1.8.0 sürümünde kalıyor. Tam uyumluluk matrisi için destek yaşam döngüsünü denetleyin.

hangi Python sürümleri desteklenir?

Paket mssql-django sürüm 2.0, Python 3.10'dan 3.14'e kadar olan sürümleri destekler. Belirli Python sürümü de Django sürümünüzle uyumlu olmalıdır: Django 5.2, Python 3.10'dan 3.13'e kadar test ediliyor, Django 6.0 ve 6.1 ise Python 3.12'den 3.14'e kadar test ediliyor. Tam uyumluluk matrisi için bkz. Destek yaşam döngüsü .

mssql-django hangi Python veritabanı sürücüsünü kullanıyor?

Sürüm 2.0 ve daha sonraki sürümler, her veritabanı takma adı için seçilen iki sürücü destekler. pyodbc varsayılandır ve SQL Server için haricen yüklenmiş bir Microsoft ODBC Driver gerektirir. Bunun yerine, ayrı bir ODBC sürücüsü kurulumu gerektirmeyen Microsoft mssql-python sürücüsünü kullanmak için OPTIONS öğesini bu diğer adın python_driver sözlüğüne ekleyin:

"OPTIONS": {
    "python_driver": "mssql_python",
},

Seçeneği içermeyen takma adlar pyodbc kullanmaya devam eder. İki yol arasındaki davranış farkları için bkz. mssql-django için veritabanı sürücüsünü seç.

mssql-django Microsoft tarafından korundu mu?

Yes. Paket mssql-django Microsoft tarafından korunur ve PyPI ve GitHub üzerinde kullanılabilir.

Konfigürasyon

settings.py dosyasında hangi ENGINE değerini kullanmalıyım?

ENGINE yapılandırmanızda "mssql" değerini DATABASES olarak ayarlayın:

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "<your-database>",
        "HOST": "<your-server>",
    },
}

Hangi ODBC sürücüsünü kullanmalıyım?

Varsayılan pyodbc yolda, SQL Server için Microsoft ODBC Driver 18 kullanın. Bu varsayılan ve 18 sürüm yüklü değilse arka uç otomatik olarak ODBC Driver 17'ye geri dönüyor. Sürücüyü OPTIONS sözlükte yalnızca belirli bir sürüme sabitlemeniz gerekiyorsa açıkça belirtin; bu durumda geri dönüş mekanizması da devre dışı kalır:

"OPTIONS": {
    "driver": "ODBC Driver 18 for SQL Server",
},

mssql-python yolu, driver seçeneğini yok sayar ve pip ile birlikte yüklenen ODBC Driver 18'i kullanır.

Azure SQL Veritabanı nasıl bağlanırım?

1433 bağlantı noktasıyla tam nitelikli sunucu adını kullanın:

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "<your-database>",
        "USER": "<your-username>",
        "PASSWORD": "<your-password>",
        "HOST": "<your-server>.database.windows.net",
        "PORT": "1433",
        "OPTIONS": {
            "driver": "ODBC Driver 18 for SQL Server",
        },
    },
}

Microsoft Entra kimlik doğrulamayı nasıl kullanabilirim?

extra_params içinde OPTIONS veya TOKEN ayarını kullanın. TOKEN ayarı, azure.identity ve DefaultAzureCredential dahil olmak üzere herhangi bir ManagedIdentityCredential kimlik bilgisiyle çalışır.

from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()
token = credential.get_token("https://database.windows.net/.default").token

"TOKEN": token,

Desteklenen tüm yöntemler için bkz. Microsoft Entra kimlik doğrulaması.

Features

mssql-django JSONField'ı destekliyor mu?

Evet, JSONField SQL Server 2016 ve sonraki sürümlerde desteklenir. JSON verileri nvarchar(max) olarak depolanır ve SQL Server JSON işlevleri kullanılarak sorgulanır. Desteklenen aramalar ve sınırlamalar için bkz. JSONField desteği .

mssql-django saat dilimi bilgisi içeren tarih-saat değerlerini destekliyor mu?

Yes. olduğundaUSE_TZ=True, Django SQL Server'da datetimeoffset veri türünü kullanır. Mevcut bir veritabanını geçiriyorsanız, mevcut datetime2 sütunlarını değiştirmeniz gerekir. Bkz. Saat dilimi desteği.

Saklı yordamları çağırabilir miyim?

Yes. Depolanmış yordamları çağırmak için connection.cursor() ile birlikte cursor.execute() kullanın. Birden çok parametreyi ve sonuç kümelerini içeren örnekler için bkz. Saklı yordamlar

bulk_create kimlikleri döndürür mü?

Varsayılan olarak hayır. return_rows_bulk_insert seçeneğinin varsayılan değeri False’dir. Veritabanınızda bunu True olarak ayarlayın OPTIONS; böylece toplu eklemeden sonra kimliklerin döndürülmesini etkinleştirebilirsiniz. Tetikleyicileri olan tablolar için bu seçenek kalmalıdır False . Bkz. Toplu işlemler.

Troubleshooting

"ODBC Sürücüsü bulunamadı" ifadesini alıyorum. Bunu nasıl düzeltebilirim?

SQL Server için Microsoft ODBC Sürücüsünü yükleyin. Linux'ta önce Microsoft APT deposunu ekleyin ve ardından sürücüyü yükleyin:

curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
curl -fsSL https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
sudo apt-get update
ACCEPT_EULA=Y sudo apt-get install -y msodbcsql18

Windows Microsoft web sitesinden yükleyiciyi indirin. macOS'ta Homebrew kullanın:

brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
HOMEBREW_ACCEPT_EULA=Y brew install msodbcsql18

Platforma özgü eksiksiz yönergeler için bkz . Yükleme .

Taşıma işlemim neden "IDENTITY sütunu değiştirilemiyor" hatasıyla başarısız oluyor?

SQL Server, bir sütunu IDENTITY (AutoField) sütunu olarak veya IDENTITY (AutoField) sütunundan değiştirmeyi desteklemez. İstenen alan türüne sahip yeni bir model oluşturun ve verileri el ile geçirin. Bkz. mssql-django'daki sınırlamalar ve desteklenmeyen özellikler.

bulk_update neden NULL olabilen alanlarla başarısız olur?

Arka uç, tüm NULL güncellemeleri otomatik olarak yönetir. Yer tutucu değerini denetlemeniz gerekiyorsa, bulk_update içindeki default parametresini kullanın; bu, CASE WHEN ... THEN NULL öğesini SQL Server tür çıkarımı hatalarına neden olan NULL ifadelerinin dışında tutar:

Product.objects.bulk_update(products, ["description"], default="")

Ayrıntılar için Toplu işlemler bölümüne bakın.