Django 2.1
SchemaEditor

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
जिसका उपयोग डेटाबेस के नाम को निर्धारित करने के लिए किया जा सकता है।
कई डेटाबेस के साथ माइग्रेशन के लिए डेटा माइग्रेशन करते समय यह उपयोगी है ।