5. 如何使用Django ORM执行类似truncate操作?¶
SQL中truncate语句用于清空一张表为以后使用。
虽然Django并没有提供内建函数来清空一张表,但还是可以使用 delete()
得到类似的结果。
例如:
>>> Category.objects.all().count()
7
>>> Category.objects.all().delete()
(7, {'entity.Category': 7})
>>> Category.objects.all().count()
0
这个语句能起作用,但它使用SQL中 DELETE FROM ...
语句。如果你有大量的数据,这将会非常慢。如果你想要激活 truncate
,你可以给 Category
添加一个 classmethod
。
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()
来实现真正的数据库truncate。