Как удалить все данные из таблицы с помощью Django

113

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

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

Это мой код, который не удался:

Reporter.objects.delete()
zjm1126
источник
Из интерфейса командной строки: stackoverflow.com/questions/6485106/…
Чиро Сантилли 郝海东 冠状 病 六四 事件 法轮功

Ответы:

139

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

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
Кроме того, если вы используете метод delete_everything (), остерегайтесь этой ошибки: code.djangoproject.com/ticket/16426
Дэвид Планелла,
1
Хотя это отвечает на первый вопрос, он не отвечает на второй вопрос. Я бы использовал 'DELETE FROM %s' % (table_name, )для этого бит, оставив таблицу пустой, но неповрежденной.
user3934630 07
94

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

Reporter.objects.all().delete()
Ясень
источник
3
Да, но это убивается, если у вас много записей в таблице. поэтому мне пришлось сделать это так: для x в MyTable.objects.all (). iterator (): x.delete ()
max
2
@max Обратите внимание, что при этом deleteвызывается метод экземпляра , а при deleteвызове метода QuerySet- нет.
alxs
20

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

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

user2817997
источник
19
Было бы полезно упомянуть, что он также удаляет вашего суперпользователя
Ауриэль Перлманн,
15
Он сказал «все данные из всех ваших таблиц», что должно указывать на то, что это очень разрушительная операция.
Jordan
6

Используя оболочку,

1) Для удаления таблицы:

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

2) Для удаления всех данных из таблицы:

python manage.py shell
>> from {app_name}.models import {model_name}
>> {model_name}.objects.all().delete()
Паршивый 007
источник
4

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, но теперь я вижу экран ошибки в консоли администратора, когда я пытаюсь выяснить, что все объекты 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

Рохит Дханкар
источник
1

Есть несколько способов:

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

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

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

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

// не используйте одно и то же имя

Ашиш Гупта
источник