Pertanyaan yang Sering Diajukan mssql-django

Artikel ini menjawab pertanyaan yang sering diajukan tentang backend mssql-django Django untuk SQL Server, Azure SQL Database, Azure SQL Managed Instance, dan database SQL di Microsoft Fabric.

General

Apa itu mssql-django?

Paket ini mssql-django adalah backend database Django yang dikelola Microsoft untuk SQL Server. Ini memungkinkan aplikasi Django terhubung ke database SQL Server, Azure SQL Database, Azure SQL Managed Instance, dan SQL di Microsoft Fabric menggunakan driver pyodbc.

Instal menggunakan pip:

pip install mssql-django

Versi Django apa yang didukung mssql-django?

Paket mssql-django v1.7 mendukung Django 3.2, 4.0, 4.1, 4.2, 5.0, 5.1, 5.2, dan 6.0. Periksa siklus hidup dukungan untuk matriks kompatibilitas penuh.

Versi Python apa yang didukung?

Paket ini mssql-django mendukung Python 3.8 dan yang lebih baru. Versi Python spesifik juga harus kompatibel dengan versi Django Anda. Misalnya, Django 5.0 memerlukan Python 3.10 dan versi yang lebih baru, dan Django 6.0 memerlukan Python 3.12 dan versi yang lebih baru. Lihat Siklus hidup dukungan untuk matriks kompatibilitas penuh.

Apakah mssql-django dikelola oleh Microsoft?

Yes. Paket mssql-django ini dikelola oleh Microsoft dan tersedia di PyPI dan GitHub.

Konfigurasi

Nilai ENGINE apa yang saya gunakan di settings.py?

Atur ENGINE ke "mssql" dalam konfigurasi Anda DATABASES :

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

Driver ODBC mana yang harus saya gunakan?

Gunakan Microsoft ODBC Driver 18 untuk SQL Server. Ini adalah opsi bawaan di mssql-django 1.7 dan versi yang lebih baru, dan backend secara otomatis beralih ke ODBC Driver 17 jika versi 18 tidak diinstal. Tentukan driver secara eksplisit dalam OPTIONS kamus hanya jika Anda perlu menyematkan versi tertentu:

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

Bagaimana cara menyambungkan ke Azure SQL Database?

Gunakan nama server yang sepenuhnya memenuhi syarat dengan port 1433:

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",
        },
    },
}

Bagaimana cara menggunakan autentikasi Microsoft Entra?

Gunakan extra_params di OPTIONS atau di setelan TOKEN. Pengaturan TOKEN ini berfungsi dengan kredensial apa pun azure.identity , termasuk DefaultAzureCredential dan ManagedIdentityCredential.

from azure.identity import DefaultAzureCredential

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

"TOKEN": token,

Lihat autentikasi Microsoft Entra untuk semua metode yang didukung.

Features

Apakah mssql-django mendukung JSONField?

Ya, JSONField didukung pada SQL Server 2016 dan yang lebih baru. Data JSON disimpan sebagai nvarchar(max) dan dikueri menggunakan fungsi JSON SQL Server. Lihat dukungan JSONField untuk pencarian dan batasan yang didukung.

Apakah mssql-django mendukung tanggal dan waktu yang menyertakan informasi zona waktu?

Yes. Ketika USE_TZ=True, Django menggunakan jenis data datetimeoffset dalam SQL Server. Jika Anda memigrasikan database yang sudah ada, Anda perlu mengubah kolom datetime2 yang sudah ada. Lihat Dukungan zona waktu.

Bisakah saya memanggil prosedur tersimpan?

Yes. Gunakan connection.cursor() dengan cursor.execute() untuk memanggil prosedur tersimpan. Lihat Prosedur tersimpan untuk contoh termasuk beberapa parameter dan tataan hasil.

Apakah bulk_create mengembalikan ID?

Secara default, tidak. Opsi return_rows_bulk_insert secara bawaan bernilai False. Atur ke True di database OPTIONS Anda untuk mengaktifkan pengembalian ID setelah penyisipan massal. Opsi ini harus tetap False untuk tabel dengan pemicu. Lihat Operasi massal.

Troubleshooting

Saya mendapatkan "Driver ODBC tidak ditemukan." Bagaimana cara memperbaikinya?

Instal Driver MICROSOFT ODBC untuk SQL Server. Di Linux, tambahkan repositori APT Microsoft terlebih dahulu lalu instal driver:

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

Di Windows, unduh penginstal dari situs web Microsoft. Di macOS, gunakan Homebrew:

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

Lihat Penginstalan untuk instruksi khusus platform lengkap.

Mengapa migrasi saya gagal dengan "Tidak dapat mengubah IDENTITY kolom"?

SQL Server tidak mendukung pengubahan kolom menjadi atau dari kolom IDENTITY (AutoField). Buat model baru dengan jenis bidang yang diinginkan dan migrasikan data secara manual. Lihat Batasan dan fitur yang tidak didukung di mssql-django.

Mengapa bulk_update gagal pada kolom yang dapat bernilai null?

Di mssql-django 1.7, backend secara otomatis menangani pembaruan dengan semua nilai NULL. Di versi sebelumnya, gunakan default parameter di bulk_update untuk menghindari NULL dalam CASE WHEN ... THEN NULL ekspresi, yang menyebabkan kesalahan inferensi jenis SQL Server:

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

Lihat Operasi massal untuk detail lebih lanjut.