• en
  • Language: ru
  • Documentation version: 2.0

5. Как выполнить операцию truncate like с помощью Django ORM?

Оператор Truncate в SQL предназначен для опустошения таблицы для дальнейшего использования. Хотя Django не предоставляет встроенную функцию для усечения таблицы, но все же аналогичного результата можно добиться, используя метод delete(). Например:

>>> Category.objects.all().count()
7
>>> Category.objects.all().delete()
(7, {'entity.Category': 7})
>>> Category.objects.all().count()
0

Это работает, но при этом используется SQL-запрос DELETE FROM .... Если у вас большое количество записей, это может быть довольно медленно. Вы можете добавить classmethod к Category, если хотите включить truncate.

class Category(models.Model):
    # ...

    @classmethod
    def truncate(cls):
        with connection.cursor() as cursor:
            cursor.execute('TRUNCATE TABLE "{0}" CASCADE'.format(cls._meta.db_table))

Затем вы можете вызвать Category.truncate() для реального усечения базы данных.