Veritabanından django modelleri oluşturmak mümkün mü?


91

Evde Django ve Django ORM ile uğraşıyorum ve söylemeliyim ki kullanım kolaylığı açısından en iyilerden biri olduğunu hissediyorum.

Ancak bunu "tersine" kullanmanın mümkün olup olmadığını merak ediyordum.

Temelde yapmak istediğim şey, mevcut bir veritabanı şemasından (django kullanmayan ve oldukça eski bir projeden) Django modelleri oluşturmaktır.

Mümkün mü?

Güncelleme: söz konusu veritabanı Oracle

Yanıtlar:


107

Evet, şu inspectdbkomutu kullanın:

Inspectdb

DATABASE_NAME ayarı tarafından işaret edilen veritabanındaki veritabanı tablolarına içten bakış atar ve standart çıktıya bir Django model modülü (modeller.py dosyası) verir.

Django'yu birlikte kullanmak istediğiniz eski bir veritabanınız varsa bunu kullanın. Komut dosyası, veritabanını inceleyecek ve içindeki her tablo için bir model oluşturacaktır.

Tahmin edebileceğiniz gibi, oluşturulan modeller tablodaki her alan için bir özniteliğe sahip olacaktır. İnspectdb'nin alan adı çıktısında birkaç özel durum olduğunu unutmayın:

[...]


1
Bu bilgiyi okurken, mysql, sqlite ve postgresql için desteklendiğini söylüyor. Ne yazık ki kullanmaya çalıştığım veritabanı Oracle :(
TM.

oof, Django'nun şu anda Oracle için hem ileriye hem de geriye doğru iyi bir desteği olduğuna inanmıyorum: /
AlbertoPL

3
Django, aklınıza gelebilecek neredeyse tüm özelliklere sahiptir. Yıllarca kullandıktan sonra bile beni hala şaşırtıyor.
Divick

Emin değilim ama ... belki de bağlantının devversiyona atıfta bulunduğunu belirtmelisiniz (daha fazla vurgu yaparak ?? belki değil ..)
Federico Gallo

yeni tablo eklendiğinde aynı komutu kullanmak mümkün

34

(Django 1.7.1) Basitçe çalıştırıldığında python manage.py inspectdb, veritabanındaki tüm tablolar için sınıflar oluşturulur ve konsolda görüntülenir.

 $ python manage.py inspectdb

Standart Unix çıktı yeniden yönlendirmesini kullanarak bunu bir dosya olarak kaydedin:

 $ python manage.py inspectdb > models.py

(Bu benim için mysql ve django 1.9 ile çalışıyor)


10

Django'nun inspectdb komut yardımcı programı Django Inspectdb Refactor'a dayalı yeniden kullanılabilir bir uygulama yaptım .

Bu, modelleri mevcut bir veritabanından modeller klasörünün içindeki farklı dosyalara böler. Bu, sayıları arttığında modellerin yönetilmesine yardımcı olur.

Pip ile kurabilirsiniz:

pip install django-inspectdb-refactor

Ardından uygulamayı settings.py'de şu şekilde kaydedin: inspectdb_refactor

Bundan sonra komut satırından şu şekilde kullanabilirsiniz:

python manage.py inspectdb_refactor --database=your_dbname_defined_in_settings --app=your_app_label

Bu, uygulamanızın içinde farklı model dosyaları olarak tüm tabloları içeren modeller klasörünü başarıyla oluşturacaktır. Örneğin:

tipik yapı

Daha fazla ayrıntı burada bulunabilir .


Buraya biraz daha açıklama ekleyin
Mathews Sunny

python3 manage.py inspectdb_refactor --database = xmldb --app = django_sb_admin Hata: Bilinmeyen komut: Kullanım için 'inspectdb_refactor' yazın 'manage.py yardım'.
ali reza

Bu uygulamayı settings.py sayfanıza inspectdb_refactor olarak kaydettirdiniz mi?
not2acoder

Bu hatayı alıyorum get_meta() missing 1 required positional argument: 'is_partition'. Django 2.0'ı kullanma
LTroya
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.