Cách xóa tất cả dữ liệu trong bảng bằng Django


Câu trả lời:


139

Bên trong một người quản lý:

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
Ngoài ra, nếu bạn sử dụng phương thức delete_everything (), hãy cẩn thận với lỗi này: code.djangoproject.com/ticket/16426
David Planella 19/02/12

1
Trong khi điều này trả lời câu hỏi đầu tiên, nó không xử lý câu hỏi thứ hai. Tôi sẽ sử dụng 'DELETE FROM %s' % (table_name, )cho bit đó, để lại bảng trống nhưng nguyên vẹn.
user3934630

93

Theo tài liệu mới nhất , phương pháp chính xác để gọi sẽ là:

Reporter.objects.all().delete()

3
Có nhưng điều này sẽ bị giết nếu bạn có nhiều bản ghi trong bảng. vì vậy tôi phải làm điều đó như: for x trong MyTable.objects.all (). iterator (): x.delete ()
tối đa

2
@max Tuy nhiên, lưu ý rằng với điều này, deletephương thức của cá thể được gọi, trong khi với lệnh deletegọi trên QuerySetthì không.
alxs

19

Nếu bạn muốn xóa tất cả dữ liệu khỏi tất cả các bảng của mình, bạn có thể muốn thử lệnh python manage.py flush. Thao tác này sẽ xóa tất cả dữ liệu trong bảng của bạn, nhưng bản thân các bảng sẽ vẫn tồn tại.

Xem thêm tại đây: https://docs.djangoproject.com/en/1.8/ref/django-admin/


19
Có thể đã được hữu ích để bạn có thể đề cập đến rằng nó cũng loại bỏ superuser của bạn
Aurielle Perlmann

15
Anh ấy đã nói "tất cả dữ liệu từ tất cả các bảng của bạn", điều này cho thấy rằng đó là một hoạt động rất phá hoại.
Jordan

6

Sử dụng shell,

1) Để xóa bảng:

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

2) Để xóa tất cả dữ liệu khỏi bảng:

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

4

Django 1.11 xóa tất cả các đối tượng khỏi bảng cơ sở dữ liệu -

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

Tham khảo tài liệu Django chính thức tại đây như được trích dẫn bên dưới - https://docs.djangoproject.com/en/1.11/topics/db/queries/#deleting-objects

Lưu ý rằng delete () là phương thức QuerySet duy nhất không được hiển thị trên chính Trình quản lý. Đây là một cơ chế an toàn để ngăn bạn vô tình yêu cầu Entry.objects.delete () và xóa tất cả các mục nhập. Nếu bạn muốn xóa tất cả các đối tượng, thì bạn phải yêu cầu rõ ràng một bộ truy vấn hoàn chỉnh:

Bản thân tôi đã thử đoạn mã được thấy bên dưới trong 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)

và trong views.pytôi có một chế độ xem chỉ đơn giản là hiển thị một trang html ...

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

nó đã kết thúc việc xóa tất cả các mục từ - model == model_4, nhưng bây giờ tôi thấy màn hình Lỗi trong Bảng điều khiển dành cho quản trị viên khi tôi cố gắng xác nhận rằng tất cả các đối tượng của model_4 đã bị xóa ...

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" 

Hãy xem xét điều đó - nếu chúng tôi không truy cập Bảng điều khiển ADMIN và thử xem các đối tượng của mô hình - đã bị xóa - ứng dụng Django hoạt động như dự kiến.

Mật khẩu màn hình quản trị django


1

Có một vài cách khác nhau:

Để xóa nó trực tiếp:

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

Để xóa nó khỏi một phiên bản:

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

// không sử dụng cùng tên

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.