Как удалить все данные в таблице с помощью Django - PullRequest
90 голосов
/ 26 декабря 2010

У меня два вопроса:

  1. Как удалить таблицу в Django?
  2. Как мне удалить все данные в таблице?

Это мой код, который не работает:

Reporter.objects.delete()

Ответы [ 5 ]

107 голосов
/ 26 декабря 2010

Внутри менеджера:

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)
67 голосов
/ 06 апреля 2015

Согласно последней документации , правильный метод для вызова будет:

Reporter.objects.all().delete()
12 голосов
/ 15 октября 2015

Если вы хотите удалить все данные из всех ваших таблиц, вы можете попробовать команду python manage.py flush.Это удалит все данные в ваших таблицах, но сами таблицы все еще будут существовать.

Подробнее здесь: https://docs.djangoproject.com/en/1.8/ref/django-admin/

3 голосов
/ 26 ноября 2017

Django 1.11 удаляет все объекты из таблицы базы данных -

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

См. Здесь официальную документацию по Django, как указано ниже - https://docs.djangoproject.com/en/1.11/topics/db/queries/#deleting-objects

Обратите внимание, что delete () - единственный QuerySetметод, который не выставляется на самого менеджера.Это механизм безопасности, который предотвращает случайный запрос 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 == model_4, но теперь я вижу экран ошибки в Adminконсоль, когда я пытаюсь убедить, что все объекты model_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

0 голосов
/ 23 ноября 2017

Существует несколько способов:

Чтобы удалить его напрямую:

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

Чтобы удалить его из экземпляра:

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

// don 'не использовать то же имя

...