Bagaimana menghapus semua data dalam tabel menggunakan Django

113

Saya punya dua pertanyaan:

  1. Bagaimana cara menghapus tabel di Django?
  2. Bagaimana cara menghapus semua data di tabel?

Ini kode saya, yang tidak berhasil:

Reporter.objects.delete()
zjm1126
sumber
Dari CLI: stackoverflow.com/questions/6485106/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

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)
Tiago
sumber
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()
Abu
sumber
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/

pengguna2817997
sumber
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()
Mangy 007
sumber
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

Rohit Dhankar
sumber
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

Ashish Gupta
sumber