Bagaimana menghapus semua data dalam tabel menggunakan Django


Jawaban:


139

Di dalam seorang manajer:

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
Juga, jika Anda adalah metode delete_everything (), waspadalah terhadap bug ini: code.djangoproject.com/ticket/16426
David Planella

1
Meskipun ini menjawab pertanyaan pertama, ini tidak menangani pertanyaan kedua. Saya akan menggunakan 'DELETE FROM %s' % (table_name, )sedikit itu, membiarkan tabel kosong tapi utuh.
pengguna3934630

93

Sesuai dokumentasi terbaru , metode yang benar untuk memanggil adalah:

Reporter.objects.all().delete()

3
Ya tapi ini terbunuh jika Anda memiliki banyak catatan di tabel. jadi saya harus melakukannya seperti: untuk x di MyTable.objects.all (). iterator (): x.delete ()
maks

2
@max Namun perlu diperhatikan bahwa dengan ini, metode instance deletedipanggil, sedangkan dengan deletepanggilan QuerySetitu tidak.
alxs

20

Jika Anda ingin menghapus semua data dari semua tabel Anda, Anda mungkin ingin mencoba perintah python manage.py flush. Ini akan menghapus semua data di tabel Anda, tetapi tabel itu sendiri akan tetap ada.

Lihat selengkapnya di sini: https://docs.djangoproject.com/en/1.8/ref/django-admin/


19
Akan sangat membantu jika Anda menyebutkan bahwa itu juga menghapus superuser Anda
Aurielle Perlmann

15
Dia mengatakan "semua data dari semua tabel Anda", yang seharusnya menunjukkan bahwa ini adalah operasi yang sangat merusak.
Yordania

6

Menggunakan shell,

1) Untuk Menghapus tabel:

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

2) Untuk menghapus semua data dari tabel:

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

4

Django 1.11 hapus semua obyek dari tabel database -

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

Lihat dokumentasi Resmi Django di sini seperti dikutip di bawah - https://docs.djangoproject.com/en/1.11/topics/db/queries/#deleting-objects

Perhatikan bahwa delete () adalah satu-satunya metode QuerySet yang tidak diekspos di Manajer itu sendiri. Ini adalah mekanisme keamanan untuk mencegah Anda secara tidak sengaja meminta Entry.objects.delete (), dan menghapus semua entri. Jika Anda ingin menghapus semua objek, maka Anda harus secara eksplisit meminta satu set kueri lengkap:

Saya sendiri mencoba potongan kode yang terlihat di bawah ini dalam file 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)

dan di dalam saya, views.pysaya memiliki tampilan yang hanya menampilkan halaman html ...

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

itu berakhir menghapus semua entri dari - model == model_4, tetapi sekarang saya bisa melihat layar Kesalahan dalam konsol Admin ketika saya mencoba untuk memastikan bahwa semua objek model_4 telah dihapus ...

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" 

Pertimbangkan bahwa - jika kita tidak pergi ke Konsol ADMIN dan mencoba dan melihat objek model - yang telah dihapus - aplikasi Django bekerja seperti yang diinginkan.

django admin screencapture


1

Ada beberapa cara:

Untuk menghapusnya secara langsung:

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

Untuk menghapusnya dari sebuah instance:

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

// jangan gunakan nama yang sama

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.