2

我正在尝试从使用 Zinnia 博客应用程序的 Django 站点中删除 300,000 多条垃圾评论。Zinnia 包含一个用于删除垃圾邮件的命令,相应地称为 spam_cleanup,但运行此命令会在被操作系统终止之前发出数千个以下错误。

OperationalError: (1040, '连接太多')

spam_cleanup 命令的代码如下:

class Command(NoArgsCommand):
"""
Command object for removing comments
marked as non-public and removed.
"""
help = "Delete the entries's comments marked as non-public and removed."

def handle_noargs(self, **options):
    verbosity = int(options.get('verbosity', 1))

    content_type = ContentType.objects.get_for_model(Entry)
    spams = comments.get_model().objects.filter(
       #is_public=False, is_removed=True,
        content_type=content_type)
    spams_count = spams.count()
    spams.delete()

    if verbosity:
        print('%i spam comments deleted.' % spams_count)

我最初的想法只是将查询分解为使用 limit 属性一次只删除 80 个项目,但 Django 告诉我在删除时我不能这样做:

AssertionError:不能将“限制”或“偏移”与删除一起使用。

将 MySQL 上的最大连接数增加到 300,000 是不合理的,对吧?我还读到 Django 在删除时模拟级联,但没有在数据库级别设置它,因此原始 SQL 查询可能会孤立所有关系。我不知道如何正确执行此删除,请帮忙!

4

0 回答 0