क्या डेटाबेस से django मॉडल उत्पन्न करना संभव है?


90

मैं घर पर Django और Django ORM के साथ खिलवाड़ कर रहा हूं, और मुझे कहना है, मुझे लगता है कि यह उपयोग में आसानी के मामले में सबसे अच्छा है।

हालांकि, मैं सोच रहा था कि क्या इसे "रिवर्स" में उपयोग करना संभव था।

मूल रूप से मैं जो करना चाहूंगा, वह एक मौजूदा डेटाबेस स्कीमा (एक परियोजना से जो django का उपयोग नहीं करता है और बहुत पुराना है) से Django मॉडल उत्पन्न करता है।

क्या यह संभव है?

अद्यतन: प्रश्न में डेटाबेस Oracle है

जवाबों:


105

हां, inspectdbकमांड का उपयोग करें :

inspectdb

DATABASE_NAME द्वारा बताए गए डेटाबेस में डेटाबेस तालिकाओं को सेट करता है और मानक आउटपुट के लिए एक Django मॉडल मॉड्यूल (एक मॉडल एरो फ़ाइल) को आउटपुट करता है।

इसका उपयोग करें यदि आपके पास एक विरासत डेटाबेस है जिसके साथ आप Django का उपयोग करना चाहते हैं। स्क्रिप्ट डेटाबेस का निरीक्षण करेगी और उसके भीतर प्रत्येक तालिका के लिए एक मॉडल बनाएगी।

जैसा कि आप उम्मीद कर सकते हैं, बनाए गए मॉडल में तालिका में हर क्षेत्र के लिए एक विशेषता होगी। ध्यान दें कि निरीक्षण-क्षेत्र के क्षेत्र-नाम आउटपुट में कुछ विशेष मामले हैं:

[...]


1
उस जानकारी को पढ़ना, यह कहता है कि यह mysql, sqlite और postgresql के लिए समर्थित है। अफसोस की बात है कि मैं जिस डेटाबेस का उपयोग करने की कोशिश कर रहा हूं, वह है Oracle :(
TM।

उफ़, मुझे विश्वास नहीं है कि इस समय Django के पास Oracle के लिए अच्छा समर्थन है, दोनों आगे या पीछे: /
AlbertoPL

3
Django के पास लगभग सभी सुविधाएँ हैं जिनके बारे में कोई सोच सकता है। यह अभी भी उपयोग के वर्षों के बाद भी मुझे आश्चर्यचकित करता है।
दिव्य

मुझे यकीन नहीं है लेकिन ... शायद आपको यह बताना चाहिए कि लिंक devसंस्करण को संदर्भित करता है (अधिक जोर देने के साथ ?? शायद नहीं ..)
फेडरिको गैलो

जब नई तालिका सम्मिलित की जाती है तो उसी आदेश का उपयोग करना संभव होता है
selvakumar

33

(Django 1.7.1) बस रनिंग python manage.py inspectdbडेटाबेस में सभी तालिकाओं के लिए कक्षाएं बनाएगा और कंसोल पर प्रदर्शित करेगा।

 $ python manage.py inspectdb

मानक यूनिक्स आउटपुट पुनर्निर्देशन का उपयोग करके इसे फ़ाइल के रूप में सहेजें:

 $ python manage.py inspectdb > models.py

(यह मेरे लिए mysql और django 1.9 के साथ काम करता है)


10

मैंने django के इंस्पेक्टब कमांड उपयोगिता, Django इंस्पेक्टब रिफ्लेक्टर पर आधारित एक पुन: प्रयोज्य ऐप बनाया है

यह मौजूदा डेटाबेस से मॉडल फ़ोल्डर के अंदर विभिन्न फाइलों में मॉडल को तोड़ता है। यह मॉडल का प्रबंधन करने में मदद करता है जब वे संख्या में बड़े हो जाते हैं।

आप इसे पाइप के माध्यम से स्थापित कर सकते हैं:

pip install django-inspectdb-refactor

फिर सेटिंग में एप्लिकेशन को इस प्रकार रजिस्टर करें inspectdb_refactor

इसके बाद आप इसे कमांड लाइन से निम्नानुसार उपयोग कर सकते हैं:

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

यह आपके ऐप के अंदर अलग-अलग मॉडल फ़ाइलों के रूप में सभी तालिकाओं के साथ सफलतापूर्वक मॉडल फ़ोल्डर बनाएगा। उदाहरण के लिए:

विशिष्ट संरचना

अधिक विवरण यहां पाया जा सकता है।


कुछ और विवरण यहाँ जोड़ें
मैथ्यूज सनी

python3 manage.pydectectdb_refactor --database = xmldb --app = django_sb_admin त्रुटि: अज्ञात आदेश: 'inspectdb_refactor' प्रकार 'manage.py' उपयोग के लिए मदद करेगा।
अली रेजा

क्या आपने इस ऐप को अपनी सेटिंग में दर्ज कर दिया था जैसे कि inspectdb_refactor ?
नॉटकोडर

मुझे यह गलतफहमी हो रही है get_meta() missing 1 required positional argument: 'is_partition'। Django 2.0
LTroya
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.