Django kullanarak bir tablodaki tüm veriler nasıl kaldırılır


113

İki sorum var:

  1. Django'da bir tabloyu nasıl silerim?
  2. Tablodaki tüm verileri nasıl kaldırırım?

Bu, başarılı olmayan kodum:

Reporter.objects.delete()

Yanıtlar:


139

Bir yöneticinin içinde:

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
Ayrıca, delete_everything () yöntemiyseniz, bu hataya dikkat edin: code.djangoproject.com/ticket/16426
David Planella

1
Bu ilk soruyu yanıtlarken, ikinci soruyu ele almıyor. 'DELETE FROM %s' % (table_name, )Tabloyu boş ama sağlam bırakarak bunun için kullanırdım .
user3934630

93

En son belgelere göre , aramak için doğru yöntem şu olacaktır:

Reporter.objects.all().delete()

3
Evet, ancak tabloda çok sayıda kaydınız varsa bu öldürülür. bu yüzden bunu şöyle yapmak zorundaydım: for x for MyTable.objects.all (). iterator (): x.delete ()
max

2
Bununla, örneğinin ancak o @max Not deleteyöntemi ile ise denir deleteçağrıya QuerySetbuna değil.
alxs

20

Tüm tablolarınızdan tüm verileri kaldırmak istiyorsanız, komutu denemek isteyebilirsiniz python manage.py flush. Bu, tablolarınızdaki tüm verileri siler, ancak tabloların kendisi hala var olacaktır.

Daha fazlasını burada görün: https://docs.djangoproject.com/en/1.8/ref/django-admin/


19
Süper kullanıcınızı da kaldırdığını belirtmeniz faydalı olur
Aurielle Perlmann

15
"Tüm tablolarınızdaki tüm veriler" dedi, bu da bunun çok yıkıcı bir işlem olduğunu göstermelidir.
Ürdün

6

Shell kullanarak,

1) Tabloyu silmek için:

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

2) Tüm verileri tablodan kaldırmak için:

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

4

Django 1.11 bir veritabanı tablosundaki tüm nesneleri sil -

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

Aşağıda alıntı yapılan Resmi Django belgelerine bakın - https://docs.djangoproject.com/en/1.11/topics/db/queries/#deleting-objects

Delete () 'nin, bir Yöneticinin kendisinde gösterilmeyen tek QuerySet yöntemi olduğunu unutmayın. Bu, yanlışlıkla Entry.objects.delete () istemenizi ve tüm girdileri silmenizi önlemek için bir güvenlik mekanizmasıdır. Tüm nesneleri silmek istiyorsanız, açıkça eksiksiz bir sorgu kümesi istemeniz gerekir:

Aşağıda görülen kod parçacığını kendim denedim 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)

ve benim içinde views.pybasitçe bir html sayfası oluşturan bir görünümüm var ...

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

- model == model_4'teki tüm girişleri silmeyi sona erdirdi, ancak şimdi Model_4'ün tüm nesnelerinin silindiğini belirlemeye çalıştığımda Yönetici konsolunda bir Hata ekranı görüyorum ...

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" 

Eğer ADMIN Konsolu'na gitmezsek ve modelin daha önceden silinmiş nesnelerini görmeye çalışmazsak, Django uygulamasının amaçlandığı gibi çalıştığını göz önünde bulundurun.

django yönetici ekran görüntüsü


1

Birkaç yol var:

Doğrudan silmek için:

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

Bir örnekten silmek için:

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

// aynı adı kullanma

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.