我想删除一个特定的记录,比如:
delete from table_name where id = 1;
如何在django模型中做到这一点?
我想删除一个特定的记录,比如:
delete from table_name where id = 1;
如何在django模型中做到这一点?
当前回答
它就像调用下面的代码一样简单。
SomeModel.objects.get(pk=1).delete()
# Or
SomeModel.objects.filter(pk=1).delete()
# SQL equivalent
# delete from table_name where id = 1;
如果您想根据id删除多条记录, 使用__in查询
SomeModel.objects.fitler(pk__in=[1,2,3,4,5,...]).delete()
# SQL equivalent
# delete from table_name where id in (1,2,4,5,...);
如果你想删除所有记录,使用.all()来检索所有查询, 然后delete()。
SomeModel.objects.all().delete()
# SQL equivalent
# delete from table_name;
其他回答
MyModel.objects.get(pk=1).delete()
如果具有指定主键的对象不存在,这将引发异常,因为它首先尝试检索指定的对象。
MyModel.objects.filter(pk=1).delete()
如果具有指定主键的对象不存在,它不会引发异常,而是直接产生查询
DELETE FROM my_models where id=1
如果你想删除一个项目
wishlist = Wishlist.objects.get(id = 20)
wishlist.delete()
例如,如果您想删除“愿望列表”中的所有项目
Wishlist.objects.all().delete()
它就像调用下面的代码一样简单。
SomeModel.objects.get(pk=1).delete()
# Or
SomeModel.objects.filter(pk=1).delete()
# SQL equivalent
# delete from table_name where id = 1;
如果您想根据id删除多条记录, 使用__in查询
SomeModel.objects.fitler(pk__in=[1,2,3,4,5,...]).delete()
# SQL equivalent
# delete from table_name where id in (1,2,4,5,...);
如果你想删除所有记录,使用.all()来检索所有查询, 然后delete()。
SomeModel.objects.all().delete()
# SQL equivalent
# delete from table_name;
delete()方法用于从数据库中删除模型实例。该方法立即删除对象。此方法返回已删除对象的编号。
例子:
删除一条记录:
data_to_be_deleted = Modelname.objects.get(fieldname = value)
data_to_be_deleted.delete()
当get方法从queryset返回单个对象时,只有单个记录将被删除。如果所提供的值不存在,将抛出一个错误。如果在表中有多个lpe记录具有相同的值,那么它也会抛出一个错误,所以在使用get时使用一个唯一的值是一个良好的实践。
用于按条件删除多条记录:
对于基于条件的删除过滤方法用于queryset,然后调用delete。
data_to_be_deleted = Modelname.objects.filter(fieldname = value)
data_to_be_deleted.delete()
删除所有记录:
要从数据库表中删除所有模型实例/记录,需要调用delete方法
data_to_be_deleted = Modelname.objects.all()
data_to_be_deleted.delete()
注意:代码可以写成Modelname.objects.all().delete()这样的单行,但为了更清楚地理解,我使用了多行。
如果使用get(),而数据不存在,则会导致错误。在这种情况下,可以使用get_object_or_404自动处理错误。然而,get_object_or_404的问题在于,它在获得所需对象之前过滤所有数据,这对于大型数据集来说效率很低。为了避免这种情况,你可以使用一个自定义方法,比如下面的例子:
class CustomException(APIException):
status_code = 400
default_detail = 'Custom exception occurred'
def get_object_or_raise(model, **kwargs):
try:
return model.objects.get(**kwargs)
except model.DoesNotExist:
raise CustomException({'error': f"{model.__name__} with {kwargs} does not exist"})
当你想要得到的时候你可以做到
instance = get_object_or_raise(anyModel, id=id)
instance.delete()