删除了多少行?

Tom*_*cki 7 mysql django django-models django-orm

是否可以检查查询删除了多少行?

queryset = MyModel.object.filter(foo=bar)
queryset.delete()
deleted = ...
Run Code Online (Sandbox Code Playgroud)

或者我应该使用交易吗?

@transaction.commit_on_success
def delete_some_rows():
    queryset = MyModel.object.filter(foo=bar)
    deleted = queryset.count()
    queryset.delete()
Run Code Online (Sandbox Code Playgroud)

PHP + MySQL示例:

mysql_query('DELETE FROM mytable WHERE id < 10');
printf("Records deleted: %d\n", mysql_affected_rows());
Run Code Online (Sandbox Code Playgroud)

Mic*_*oot 4

在很多情况下,您想知道删除了多少行,例如,如果您根据删除的行数执行某些操作。通过执行 COUNT 检查它会创建额外的数据库负载,并且不是原子的。

queryset.delete()方法立即删除对象并返回已删除对象的数量以及包含每种对象类型的删除次数的字典。检查文档以获取更多详细信息:https://docs.djangoproject.com/en/stable/topics/db/queries/#deleting-objects