Django 2.1

SchemaEditor




django

SchemaEditor

class BaseDatabaseSchemaEditor [source]

Django का माइग्रेशन सिस्टम दो भागों में विभाजित है; गणना और संग्रहीत करने के लिए तर्क क्या संचालन चलाया जाना चाहिए ( django.db.migrations ), और डेटाबेस अमूर्त परत "एस एक मॉडल बनाने" या एसक्यूएल में "एक क्षेत्र को हटाने" जैसी चीजों को बदल देता है - जो SchemaEditor का काम है।

यह संभावना नहीं है कि आप Django का उपयोग करके एक सामान्य डेवलपर के रूप में सीधे SchemaEditor साथ बातचीत करना चाहेंगे, लेकिन यदि आप अपना स्वयं का माइग्रेशन सिस्टम लिखना चाहते हैं, या अधिक उन्नत आवश्यकताएं हैं, तो यह एसक्यूएल लिखने की तुलना में बहुत अच्छा है।

Django में प्रत्येक डेटाबेस SchemaEditor अपने संस्करण की आपूर्ति करता है, और यह connection.schema_editor() माध्यम से हमेशा सुलभ होता है SchemaEditor connection.schema_editor() संदर्भ प्रबंधक:

with connection.schema_editor() as schema_editor:
    schema_editor.delete_model(MyModel)

इसे संदर्भ प्रबंधक के माध्यम से उपयोग किया जाना चाहिए क्योंकि यह लेन-देन और आस्थगित एसक्यूएल जैसी चीजों का प्रबंधन करने की अनुमति देता है (जैसे ForeignKey बाधाओं को बनाना)।

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

यदि आप Django के लिए एक तृतीय-पक्ष डेटाबेस बैकएंड लिख रहे हैं या बनाए रख रहे हैं, तो आपको 1.7 के माइग्रेशन कार्यक्षमता के साथ काम करने के लिए एक SchemaEditor कार्यान्वयन प्रदान करना होगा - हालांकि, जब तक आपका डेटाबेस SQL ​​के उपयोग में अपेक्षाकृत मानक है संबंधपरक डिज़ाइन, आपको अंतर्निहित Django SchemaEditor कक्षाओं में से एक को उप-वर्ग करने में सक्षम होना चाहिए और सिंटैक्स को थोड़ा SchemaEditor । यह भी ध्यान दें कि कुछ नए डेटाबेस फीचर्स हैं, जिनके लिए माइग्रेशन दिखेगा: can_rollback_ddl और can_rollback_ddl सबसे महत्वपूर्ण हैं।

तरीके

execute()

BaseDatabaseSchemaEditor.execute(sql, params=[]) [source]

यदि आपूर्ति की गई, तो पैरामीटर के साथ, SQL कथन पारित हुआ। यह सामान्य डेटाबेस कर्सर के आसपास एक साधारण आवरण है जो उपयोगकर्ता की इच्छा होने पर SQL को .sql फ़ाइल पर कब्जा करने की अनुमति देता है।

create_model()

BaseDatabaseSchemaEditor.create_model(model) [source]

प्रदान किए गए मॉडल के लिए डेटाबेस में एक नई तालिका बनाता है, साथ ही किसी भी अद्वितीय बाधाओं या अनुक्रमित के साथ इसकी आवश्यकता होती है।

delete_model()

BaseDatabaseSchemaEditor.delete_model(model) [source]

डेटाबेस में मॉडल की तालिका को छोड़ देता है और इसके साथ किसी भी अनूठे अवरोध या अनुक्रमित के साथ।

add_index()

BaseDatabaseSchemaEditor.add_index(model, index) [source]

index को model की तालिका में जोड़ता है।

remove_index()

BaseDatabaseSchemaEditor.remove_index(model, index) [source]

model की तालिका से index निकालता है।

alter_unique_together()

BaseDatabaseSchemaEditor.alter_unique_together(model, old_unique_together, new_unique_together) [source]

किसी मॉडल के unique_together मूल्य को unique_together ; जब तक वे नए मूल्य से मेल नहीं खाते तब तक मॉडल की तालिका से अद्वितीय बाधाओं को जोड़ देगा या हटा देगा।

alter_index_together()

BaseDatabaseSchemaEditor.alter_index_together(model, old_index_together, new_index_together) [source]

एक मॉडल के index_together मूल्य में परिवर्तन; यह मॉडल की तालिका से अनुक्रमणिका को तब तक जोड़ेगा या हटाएगा जब तक वे नए मूल्य से मेल नहीं खाते।

alter_db_table()

BaseDatabaseSchemaEditor.alter_db_table(model, old_db_table, new_db_table) [source]

मॉडल की तालिका का नाम old_db_table से old_db_table में new_db_table

alter_db_tablespace()

BaseDatabaseSchemaEditor.alter_db_tablespace(model, old_db_tablespace, new_db_tablespace) [source]

एक टेबल से दूसरे टेबल पर मॉडल की तालिका को स्थानांतरित करता है।

add_field()

BaseDatabaseSchemaEditor.add_field(model, field) [source]

फ़ील्ड का प्रतिनिधित्व करने के लिए मॉडल की तालिका में एक स्तंभ (या कभी-कभी एकाधिक) जोड़ता है। यदि फ़ील्ड में db_index=True या unique=True तो यह इंडेक्स या एक अद्वितीय बाधा भी जोड़ देगा।

यदि फ़ील्ड के लिए मान के बिना एक ManyToManyField फ़ील्ड है, तो स्तंभ बनाने के बजाय, यह संबंध का प्रतिनिधित्व करने के लिए एक तालिका बना देगा। यदि के through से प्रदान किया जाता है, तो यह एक सेशन नहीं है।

यदि फ़ील्ड ForeignKey , तो यह कॉलम में विदेशी कुंजी बाधा भी जोड़ेगा।

remove_field()

BaseDatabaseSchemaEditor.remove_field(model, field) [source]

मॉडल की तालिका से फ़ील्ड का प्रतिनिधित्व करने वाले कॉलम (एस) को हटाता है, साथ ही उस क्षेत्र की वजह से किसी भी अद्वितीय बाधाओं, विदेशी प्रमुख बाधाओं या अनुक्रमित के साथ।

यदि फ़ील्ड मान के बिना एक ManyToManyField फ़ील्ड है, तो यह रिश्ते को ट्रैक करने के लिए बनाई गई तालिका को निकाल देगा। यदि के through से प्रदान किया जाता है, तो यह एक सेशन नहीं है।

alter_field()

BaseDatabaseSchemaEditor.alter_field(model, old_field, new_field, strict=False) [source]

यह मॉडल को पुराने क्षेत्र से नए पर क्षेत्र में बदल देता है। इसमें स्तंभ का नाम ( db_column विशेषता) बदलना, फ़ील्ड के प्रकार को बदलना (यदि फ़ील्ड वर्ग बदलता है), फ़ील्ड की NULL स्थिति को बदलना, फ़ील्ड की केवल विशिष्ट बाधाओं और अनुक्रमणिका को जोड़ना, प्राथमिक कुंजी बदलना , और ForeignKey बाधाओं की मंजिल को बदलना।

सबसे आम परिवर्तन जो यह नहीं कर सकता है, वह कई ManyToManyField को एक सामान्य फ़ील्ड या इसके विपरीत में बदल रहा है; Django डेटा खोए बिना ऐसा नहीं कर सकता है, और इसलिए यह इसे करने से इंकार कर देगा। इसके बजाय, remove_field() और remove_field() को अलग से बुलाया जाना चाहिए।

यदि डेटाबेस में support_combined_alters supports_combined_alters , तो Django यथासंभव एकल डेटाबेस कॉल में इनमें से कई को करने की कोशिश करेगा; अन्यथा, यह प्रत्येक परिवर्तन के लिए एक अलग अलर्ट जारी करेगा, लेकिन ALTERs जारी नहीं करेगा जहां कोई परिवर्तन आवश्यक नहीं है (जैसा कि दक्षिण अक्सर किया जाता है)।

गुण

सभी विशेषताओं को केवल तभी पढ़ा जाना चाहिए जब तक कि अन्यथा न कहा जाए।

connection

SchemaEditor.connection

डेटाबेस के लिए एक कनेक्शन ऑब्जेक्ट। कनेक्शन का एक उपयोगी गुण alias जिसका उपयोग डेटाबेस के नाम को निर्धारित करने के लिए किया जा सकता है।

कई डेटाबेस के साथ माइग्रेशन के लिए डेटा माइग्रेशन करते समय यह उपयोगी है