如何使用Django的ORM截断表?
要清空一个数据库表,我使用这个SQL查询:
TRUNCATE TABLE `books`
我该如何使用Django的模型和ORM来清空一个表呢?
我试过这个方法,但没有成功:
Book.objects.truncate()
9 个回答
32
你可以使用模型的 _meta 属性来填写数据库表的名称:
from django.db import connection
cursor = connection.cursor()
cursor.execute('TRUNCATE TABLE "{0}"'.format(MyModel._meta.db_table))
重要提示:这对继承的模型不适用,因为它们涉及多个表!
44
你可以用一种快速又轻便的方法来实现这个,但不要使用Django的ORM(对象关系映射)。你可以通过Django的连接游标直接执行原始的SQL语句:
from django.db import connection
cursor = connection.cursor()
cursor.execute("TRUNCATE TABLE `books`")
95
用ORM(对象关系映射)你能做到的最接近的删除操作就是 Book.objects.all().delete()
。
不过,这里有些区别:使用truncate(截断)可能会更快,但ORM会去处理外键的引用,连带着删除其他表里的相关对象。