开发者

How many rows were deleted?

Is it possible to check how many rows were deleted by a query?

queryset = MyModel.object.filter(foo=bar)
queryset.delete()
deleted = ...

Or should I use transactions for that?

@transaction.commit_on_success
def delete_some_rows():
    queryset = MyModel.object.filter(foo=bar)
    deleted = queryset.count()
    开发者_StackOverflow社区queryset.delete()

PHP + MySQL example:

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


There are many situations where you want to know how many rows were deleted, for example if you do something based on how many rows were deleted. Checking it by performing a COUNT creates extra database load and is not atomic.

The queryset.delete() method immediately deletes the object and returns the number of objects deleted and a dictionary with the number of deletions per object type. Check the docs for more details: https://docs.djangoproject.com/en/stable/topics/db/queries/#deleting-objects


Actual rows affected you could view with SELECT row_count(). First of all qs.count() and cursor.rowcount is not same things!

In MySQL with InnoDB with REPEATABLE READ (default mode) READ queries and WRITE queries view !!DIFFERENT!!! querysets!

READ queries read from old snapshot, while WRITE queries view actual committed data, like they works in READ COMMITTED mode.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜