Django का उपयोग करके तालिका में सभी डेटा कैसे निकालें


113

मेरे दो सवाल हैं:

  1. मैं Django में एक तालिका कैसे हटाऊं?
  2. मैं तालिका का सारा डेटा कैसे निकालूं?

यह मेरा कोड है, जो सफल नहीं है:

Reporter.objects.delete()

जवाबों:


139

एक प्रबंधक के अंदर:

def delete_everything(self):
    Reporter.objects.all().delete()

def drop_table(self):
    cursor = connection.cursor()
    table_name = self.model._meta.db_table
    sql = "DROP TABLE %s;" % (table_name, )
    cursor.execute(sql)

3
इसके अलावा, यदि आप delete_everything () विधि हैं, तो इस बग से सावधान रहें: code.djangoproject.com/ticket/16426
डेविड प्लेनेला

1
हालांकि यह पहले प्रश्न का उत्तर देता है, लेकिन यह दूसरे प्रश्न को संभालता नहीं है। मैं 'DELETE FROM %s' % (table_name, )उस बिट के लिए उपयोग करूंगा , जिससे मेज खाली रह जाएगी लेकिन बरकरार रहेगी ।
user3934630

93

नवीनतम दस्तावेज़ के अनुसार , कॉल करने का सही तरीका होगा:

Reporter.objects.all().delete()

3
हां, लेकिन अगर टेबल में कई रिकॉर्ड हैं, तो यह मारा जाता है। इसलिए मुझे ऐसा करना था: x के लिए MyTable.objects.all () में। इटरेटर (): x.delete ()
अधिकतम

2
@ max नोट हालांकि इसके साथ, इंस्टेंस का deleteतरीका कहा जाता है, जबकि इस deleteपर कॉल QuerySetनहीं है।
12

19

यदि आप अपने सभी तालिकाओं से सभी डेटा हटाना चाहते हैं, तो आप कमांड को आज़माना चाहते हैं python manage.py flush। यह आपकी तालिकाओं के सभी डेटा को हटा देगा, लेकिन तालिकाएँ अभी भी मौजूद होंगी।

यहाँ और देखें: https://docs.djangoproject.com/en/1.8/ref/django-admin/


19
आपके लिए यह उल्लेख करने में मददगार होगा कि यह आपके
सुपरयुसर

15
उन्होंने कहा "आपके सभी तालिकाओं से सभी डेटा", जो यह इंगित करना चाहिए कि यह एक बहुत विनाशकारी ऑपरेशन है।
जॉर्डन

6

खोल का उपयोग करना,

1) तालिका हटाने के लिए:

python manage.py dbshell
>> DROP TABLE {app_name}_{model_name}

2) तालिका से सभी डेटा को हटाने के लिए:

python manage.py shell
>> from {app_name}.models import {model_name}
>> {model_name}.objects.all().delete()

4

Django 1.11 डेटाबेस टेबल से सभी वस्तुओं को हटा दें -

Entry.objects.all().delete()  ## Entry being Model Name. 

नीचे दिए गए उद्धरण के अनुसार यहाँ आधिकारिक Django के दस्तावेज़ देखें - https://docs.djangoproject.com/en/1.11/topics/db/queries/#de हटाना-objects

ध्यान दें कि हटाना () एकमात्र क्वेरीसेट विधि है जो किसी प्रबंधक पर ही उजागर नहीं होती है। यह गलती से आपको Entry.objects.delete () का अनुरोध करने और सभी प्रविष्टियों को हटाने से रोकने के लिए एक सुरक्षा तंत्र है। यदि आप सभी ऑब्जेक्ट हटाना चाहते हैं, तो आपको स्पष्ट रूप से एक संपूर्ण क्वेरी सेट का अनुरोध करना होगा:

मैंने खुद अपने नीचे देखे गए कोड स्निपेट को आजमाया somefilename.py

    # for deleting model objects
    from django.db import connection
    def del_model_4(self):
        with connection.schema_editor() as schema_editor:
            schema_editor.delete_model(model_4)

और मेरे भीतर views.pyएक ऐसा दृश्य है जो बस एक html पृष्ठ को प्रस्तुत करता है ...

  def data_del_4(request):
      obj = calc_2() ## 
      obj.del_model_4()
      return render(request, 'dc_dash/data_del_4.html') ## 

इसने सभी प्रविष्टियों को हटा दिया - मॉडल == model_4 से, लेकिन अब मुझे व्यवस्थापक कंसोल में एक त्रुटि स्क्रीन देखने को मिलती है जब मैं यह पता लगाने की कोशिश करता हूं कि मॉडल_4 की सभी वस्तुओं को हटा दिया गया है ...

ProgrammingError at /admin/dc_dash/model_4/
relation "dc_dash_model_4" does not exist
LINE 1: SELECT COUNT(*) AS "__count" FROM "dc_dash_model_4" 

इस पर विचार करें कि - अगर हम ADMIN कंसोल पर नहीं जाते हैं और मॉडल की वस्तुओं को देखने की कोशिश करते हैं और देखते हैं - जो पहले ही हटा दी गई हैं - Django ऐप ठीक उसी तरह से काम करता है।

django व्यवस्थापक पेंचकपट्टी


1

कुछ तरीके हैं:

इसे सीधे हटाने के लिए:

SomeModel.objects.filter(id=id).delete()

इसे एक उदाहरण से हटाने के लिए:

instance1 = SomeModel.objects.get(id=id)
instance1.delete()

// समान नाम का उपयोग न करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.