Apakah mungkin untuk membuat model django dari database?

91

Saya telah bermain-main dengan Django dan Django ORM di rumah, dan saya harus mengatakan, saya merasa ini adalah salah satu yang terbaik di luar sana dalam hal kemudahan penggunaan.

Namun, saya bertanya-tanya apakah mungkin menggunakannya secara "terbalik".

Pada dasarnya apa yang ingin saya lakukan adalah membuat model Django dari skema database yang ada (dari proyek yang tidak menggunakan django dan sudah cukup tua).

Apakah ini mungkin?

Update: database yang dimaksud adalah Oracle

TM.
sumber

Jawaban:

107

Ya, gunakan inspectdbperintah:

inspectdb

Mengintrospeksi tabel database dalam database yang ditunjuk oleh pengaturan DATABASE_NAME dan mengeluarkan modul model Django (file models.py) ke keluaran standar.

Gunakan ini jika Anda memiliki basis data warisan yang dengannya Anda ingin menggunakan Django. Skrip akan memeriksa database dan membuat model untuk setiap tabel di dalamnya.

Seperti yang Anda duga, model yang dibuat akan memiliki atribut untuk setiap bidang di tabel. Perhatikan bahwa inspectdb memiliki beberapa kasus khusus dalam keluaran nama bidangnya:

[...]

ars
sumber
1
Membaca info itu, dikatakan itu didukung untuk mysql, sqlite, dan postgresql. Sayangnya database yang saya coba gunakan adalah Oracle :(
TM.
Oof, saya tidak percaya Django memiliki dukungan yang baik untuk Oracle saat ini, baik maju maupun mundur: /
AlbertoPL
3
Django memiliki hampir semua fitur yang dapat dipikirkan. Itu masih membuat saya takjub bahkan setelah bertahun-tahun digunakan.
Divick
Saya tidak yakin tapi ... mungkin Anda harus menunjukkan bahwa tautan tersebut mengacu pada devversi (dengan lebih menekankan ?? mungkin tidak ..)
Federico Gallo
apakah mungkin untuk menggunakan perintah yang sama ketika tabel baru dimasukkan
selvakumar
34

(Django 1.7.1) Cukup menjalankan python manage.py inspectdbakan membuat kelas untuk semua tabel dalam database dan ditampilkan pada konsol.

 $ python manage.py inspectdb

Simpan ini sebagai file dengan menggunakan pengalihan keluaran Unix standar:

 $ python manage.py inspectdb > models.py

(Ini bekerja untuk saya dengan mysql dan django 1.9)

KKlalala
sumber
10

Saya telah membuat aplikasi yang dapat digunakan kembali berdasarkan utilitas perintah inspectdb django , Django Inspectdb Refactor .

Ini memecah model menjadi file yang berbeda di dalam folder model dari database yang ada. Ini membantu mengelola model ketika jumlahnya menjadi besar.

Anda dapat menginstalnya melalui pip:

pip install django-inspectdb-refactor

Kemudian daftarkan aplikasi di settings.py sebagai inspectdb_refactor

Setelah ini, Anda dapat menggunakannya dari baris perintah sebagai:

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

Ini akan berhasil membuat folder model dengan semua tabel sebagai file model berbeda di dalam aplikasi Anda. Sebagai contoh:

struktur khas

Detail selengkapnya dapat ditemukan di sini.

not2acoder
sumber
Tambahkan beberapa deskripsi lagi di sini
Mathews Sunny
python3 manage.py inspectdb_refactor --database = xmldb --app = django_sb_admin Kesalahan: Perintah tidak dikenal: 'inspectdb_refactor' Ketik 'manage.py help' untuk penggunaan.
ali reza
apakah Anda mendaftarkan aplikasi ini di settings.py Anda sebagai inspectdb_refactor ?
not2acoder
Saya mendapatkan kesalahan ini get_meta() missing 1 required positional argument: 'is_partition'. Menggunakan django 2.0
LTroya