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()
для реального усечения базы данных.