Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, mevcut bir SQL Server veritabanından model kodu oluşturmak için Django'nun inspectdb yönetim komutunun nasıl kullanılacağı açıklanmaktadır.
Prerequisites
settings.py içindeki INSTALLED_APPS öğenize mssql ekleyin. Bu adım, varsayılan olmayan şemaları incelemek için --schema bayrağını ekleyen inspectdb için mssql-django yönetim komutu geçersiz kılmasını kaydeder:
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"mssql",
"myapp",
]
Note
Veritabanı mssql arka ucu bu adım olmadan çalışır.
"mssql" öğesinin INSTALLED_APPS öğesine eklenmesi yalnızca inspectdb üzerinde --schema bayrağını etkinleştirmek için gereklidir. Bu olmadan, inspectdb yalnızca varsayılan şemayı (dbo) inceler.
Temel kullanım
Yapılandırılan veritabanındaki tüm tablolar için modeller oluşturun:
python manage.py inspectdb
Çıkışı doğrudan bir model dosyasına kaydedin:
python manage.py inspectdb > myapp/models.py
Belirli tabloları inceleme
Yalnızca belirli tablolar için modeller oluşturun:
python manage.py inspectdb MyTable AnotherTable
Çoklu şema desteği
mssql-django arka uç, birden çok şemayı desteklemek için inspectdb öğesini genişletir. Bayrağı olan --schema bir şema belirtin:
python manage.py inspectdb --schema "dbo"
python manage.py inspectdb --schema "sales"
Bu özellik, tabloları birden çok şemada düzenleyen SQL Server veritabanları için kullanışlıdır.
Birden çok şemadan modellerle çalışma
Veritabanınız birden çok şema kullandığında, tabloyu şema adıyla nitelemek için modelin db_table sınıfında kullanınMeta. oluşturulan inspectdb modeller şema ön ekleri içermeyebilir, bu nedenle bunları el ile ekleyin:
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
"[schema].[table]" gibi köşeli ayraç içine alınmış iki parçalı bir ad kullanın. Arka uç, db_table ifadesini tek bir tanımlayıcı olarak ele alır; bu nedenle köşeli ayraç içindeki adlar doğru şekilde korunurken, çift tırnaklı biçimler sabit bir tablo adı olarak yeniden çift tırnak içine alınır.
Şemalar arası yabancı anahtarlar
Django, her iki tablo da aynı veritabanında olduğu ve db_table değerler doğru ayarlandığı sürece şemalar arasında yabancı anahtar ilişkilerini izleyebilir:
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, başvurulan modelin ForeignKey değeri aracılığıyla çözümlendiğinden db_table ilişki alanında ek şema yapılandırması gerekmez.
Oluşturulan modelleri gözden geçirme
inspectdb komutu, el ile düzeltmeler gerektirebilecek model kodu oluşturur:
Set
managed = False: Oluşturulan modeller sınıfınamanaged = FalsedahildirMeta; bu da Django'nun tablo şemasını yönetmediği anlamına gelir. Tablonun geçişlerini Django'nın yönetmesini istiyorsanız bu satırı kaldırın.Birincil anahtar ekleme: Tabloda algılayabileceğiniz bir birincil anahtar
inspectdbyoksa, el ile eklemeniz gerekebilir.İlişki alanlarını düzeltin: Yabancı anahtar ilişkileri, özellikle şemalar arası referanslarda, ayarlanmayı gerektirebilir.
Oluşturulan çıktı örneği:
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"
Sınırlamalar
komut, inspectdb SQL Server ile kullanıldığında aşağıdaki sınırlamalara sahiptir.
Bileşik birincil anahtar denetimi
Bileşik birincil anahtarlara sahip tablolar tam model tanımları oluşturmayabilir. Django 5.2 ve sonraki sürümlerde, inspectdb komutunu çalıştırdıktan sonra CompositePrimaryKey öğesini el ile tanımlayın veya vekil birincil anahtar kullanın.
Views
Komut inspectdb görünümleri inceleyebilir, ancak oluşturulan modeller alan türlerinin ve null kısıtlamaların el ile ayarlanmasını gerektirebilir.