Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan cara menggunakan perintah manajemen Django inspectdb untuk menghasilkan kode model dari database SQL Server yang ada.
Prasyarat
Tambahkan mssql ke INSTALLED_APPS anda di settings.py. Langkah ini mendaftarkan penimpaan perintah manajemen mssql-django untuk inspectdb, yang menambahkan flag --schema untuk memeriksa skema non-default:
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"mssql",
"myapp",
]
Note
Backend mssql database berfungsi tanpa langkah ini. Menambahkan "mssql" ke INSTALLED_APPS hanya diperlukan untuk mengaktifkan flag --schema pada inspectdb. Tanpa itu, inspectdb hanya memeriksa skema default (dbo).
Penggunaan dasar
Hasilkan model untuk semua tabel dalam database yang dikonfigurasi:
python manage.py inspectdb
Simpan output langsung ke file model:
python manage.py inspectdb > myapp/models.py
Memeriksa tabel tertentu
Hasilkan model hanya untuk tabel tertentu:
python manage.py inspectdb MyTable AnotherTable
Dukungan multiskema
Backend mssql-django memperluas inspectdb untuk mendukung beberapa skema. Tentukan skema dengan flag --schema:
python manage.py inspectdb --schema "dbo"
python manage.py inspectdb --schema "sales"
Fitur ini berguna untuk database SQL Server yang mengatur tabel di beberapa skema.
Bekerja dengan model dari beberapa skema
Saat database Anda menggunakan beberapa skema, gunakan db_table di kelas model Meta untuk memenuhi syarat tabel dengan nama skemanya. Model yang dihasilkan dari inspectdb mungkin tidak menyertakan awalan skema, jadi tambahkan secara manual:
class Customer(models.Model):
customer_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=200)
class Meta:
managed = False
db_table = "[sales].[Customer]"
class Product(models.Model):
product_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=10, decimal_places=2)
class Meta:
managed = False
db_table = "[inventory].[Product]"
Important
Gunakan nama dua bagian yang dikurung seperti "[schema].[table]". Backend memperlakukan db_table sebagai pengidentifikasi tunggal, sehingga nama yang dikurung dipertahankan dengan benar sementara formulir yang dikutip ganda dikutip kembali sebagai nama tabel harfiah.
Kunci asing antar skema
Django dapat mengikuti hubungan kunci asing di seluruh skema selama kedua tabel berada dalam database yang sama dan db_table nilai diatur dengan benar:
class OrderItem(models.Model):
order_item_id = models.AutoField(primary_key=True)
product = models.ForeignKey("Product", on_delete=models.CASCADE)
quantity = models.IntegerField()
class Meta:
managed = False
db_table = "[sales].[OrderItem]"
Django menentukan ForeignKey melalui nilai db_table dari model yang direferensikan, sehingga tidak diperlukan konfigurasi skema tambahan pada field relasi.
Meninjau model yang dihasilkan
Perintah ini inspectdb menghasilkan kode model yang mungkin memerlukan penyesuaian manual:
Set
managed = False: Model yang dihasilkan termasukmanaged = FalsedalamMetakelas , yang berarti Django tidak mengelola skema tabel. Hapus baris ini jika Anda ingin Django mengelola migrasi untuk tabel.Menambahkan kunci primer: Jika tabel tidak memiliki kunci utama yang
inspectdbdapat dideteksi, Anda mungkin perlu menambahkannya secara manual.Memperbaiki bidang hubungan: Hubungan kunci asing mungkin memerlukan penyesuaian, terutama untuk referensi lintas skema.
Contoh output yang dihasilkan:
class Product(models.Model):
product_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=10, decimal_places=2)
created_at = models.DateTimeField(blank=True, null=True)
class Meta:
managed = False
db_table = "Product"
Limitations
Perintah inspectdb memiliki batasan berikut saat digunakan dengan SQL Server.
Pemeriksaan kunci utama komposit
Tabel dengan kunci primer komposit mungkin tidak menghasilkan definisi model lengkap. Di Django 5.2 dan yang lebih baru, tentukan CompositePrimaryKey secara manual setelah menjalankan inspectdb, atau gunakan kunci primer pengganti.
Views
Perintah inspectdb dapat memeriksa tampilan, tetapi model yang dihasilkan mungkin memerlukan penyesuaian manual jenis bidang dan batasan null.