เป็นไปได้ไหมที่จะสร้างโมเดล django จากฐานข้อมูล


94

ฉันยุ่งกับ Django และ Django ORM ที่บ้านและฉันต้องบอกว่าฉันรู้สึกว่ามันเป็นหนึ่งในสิ่งที่ดีที่สุดในแง่ของการใช้งานที่ง่าย

อย่างไรก็ตามฉันสงสัยว่าจะสามารถใช้แบบ "ย้อนกลับ" ได้หรือไม่

โดยทั่วไปสิ่งที่ฉันต้องการทำคือสร้างโมเดล Django จากสคีมาฐานข้อมูลที่มีอยู่ (จากโครงการที่ไม่ใช้ django และค่อนข้างเก่า)

เป็นไปได้หรือไม่

อัปเดต:ฐานข้อมูลที่เป็นปัญหาคือ Oracle

คำตอบ:


108

ใช่ใช้inspectdbคำสั่ง:

inspdb

ตรวจสอบตารางฐานข้อมูลในฐานข้อมูลที่ชี้ไปโดยการตั้งค่า DATABASE_NAME และส่งออกโมดูลโมเดล Django (ไฟล์ models.py) ไปยังเอาต์พุตมาตรฐาน

ใช้สิ่งนี้หากคุณมีฐานข้อมูลเดิมที่คุณต้องการใช้ Django สคริปต์จะตรวจสอบฐานข้อมูลและสร้างแบบจำลองสำหรับแต่ละตารางภายในนั้น

ตามที่คุณคาดหวังโมเดลที่สร้างขึ้นจะมีแอตทริบิวต์สำหรับทุกฟิลด์ในตาราง โปรดทราบว่า Inspectordb มีกรณีพิเศษบางประการในเอาต์พุตชื่อฟิลด์:

[... ]


1
เมื่ออ่านข้อมูลดังกล่าวมันบอกว่ารองรับ mysql, sqlite และ postgresql น่าเสียดายที่ฐานข้อมูลที่ฉันพยายามใช้คือ Oracle :(
TM

ฉันไม่เชื่อว่า Django มีการสนับสนุนที่ดีสำหรับ Oracle ในขณะนี้ทั้งไปข้างหน้าหรือข้างหลัง: /
AlbertoPL

4
Django มีคุณสมบัติเกือบทั้งหมดที่คุณคิดได้ มันยังคงทำให้ฉันประหลาดใจแม้จะใช้งานไปหลายปี
Divick

ฉันไม่แน่ใจ แต่ ... บางทีคุณควรชี้ให้เห็นว่าลิงก์นั้นอ้างถึงdevเวอร์ชัน (เน้นมากกว่านี้หรือไม่อาจจะไม่ใช่ .. )
Federico Gallo

เป็นไปได้ไหมที่จะใช้คำสั่งเดียวกันเมื่อแทรกตารางใหม่
selvakumar

37

(Django 1.7.1) เพียงแค่เรียกใช้python manage.py inspectdbจะสร้างคลาสสำหรับตารางทั้งหมดในฐานข้อมูลและแสดงบนคอนโซล

 $ python manage.py inspectdb

บันทึกเป็นไฟล์โดยใช้การเปลี่ยนทิศทางเอาต์พุต Unix มาตรฐาน:

 $ python manage.py inspectdb > models.py

(สิ่งนี้ใช้ได้กับฉันกับ mysql และ django 1.9)


11

ผมได้ทำ app ที่นำมาใช้ใหม่ขึ้นอยู่กับคำสั่งยูทิลิตี้ inspectdb Django ของ Django Inspectdb Refactor

สิ่งนี้จะแบ่งโมเดลออกเป็นไฟล์ต่างๆภายในโฟลเดอร์โมเดลจากฐานข้อมูลที่มีอยู่ ซึ่งจะช่วยในการจัดการโมเดลเมื่อมีจำนวนมาก

คุณสามารถติดตั้งผ่าน pip:

pip install django-inspectdb-refactor

จากนั้นลงทะเบียนแอพใน settings.py เป็น inspectdb_refactor

หลังจากนี้คุณสามารถใช้งานได้จากบรรทัดคำสั่งดังนี้:

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

การดำเนินการนี้จะสร้างโฟลเดอร์โมเดลที่มีตารางทั้งหมดเป็นไฟล์โมเดลต่างๆภายในแอปของคุณได้สำเร็จ ตัวอย่างเช่น:

โครงสร้างทั่วไป

สามารถดูรายละเอียดเพิ่มเติมได้ที่นี่


เพิ่มคำอธิบายเพิ่มเติมที่นี่
Mathews Sunny

python3 Manage.py ตรวจสอบ db_refactor --database = xmldb --app = django_sb_admin Error: Unknown command: 'inspdb_refactor' Type 'Manage.py help' สำหรับการใช้งาน
ali reza

คุณได้ลงทะเบียนแอปนี้ใน settings.py ของคุณเป็นinspdb_refactorหรือ
not2acoder

ฉันได้รับความผิดพลาดget_meta() missing 1 required positional argument: 'is_partition'นี้ ใช้ django 2.0
LTroya
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.