我正在尝试从使用 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 查询可能会孤立所有关系。我不知道如何正确执行此删除,请帮忙!