2016-11-07 122 views
0

我越来越Django的管理命令的MySQL错误

django.db.utils.NotSupportedError: (1235, "This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'")

当我尝试运行此脚本

class Command(NoArgsCommand): 
    def handle_noargs(self, **options): 
     survey_res = SurveyResults.objects.all() 
     for i in survey_res: 
      rescount = SurveyResults.objects.filter(pkey=i.pkey, partner_id=i.partner_id).count() 
      if rescount > 1: 
       objs = SurveyResults.objects.filter(pkey=i.pkey, partner_id=i.partner_id)[:1] 
       SurveyResults.objects.exclude(pk__in=objs).delete() 

任何解决方案..? 我想删除除最近有两个共同的领域的所有记录。

+0

dunno,但您可以尝试拆分2个查询中的最后一行,首先排除它们,然后删除这些对象。 (如果这是错误来自的地方) – FeedTheWeb

回答

0

那么你的MySQL版本不支持这些命令,所以你的选择是 要么使用不同版本的mySQL,要么不使用'IN',因为那好像是 的罪魁祸首。因此,如何改变最后一位:

if rescount > 1: 
    objs = SurveyResults.objects.filter(pkey=i.pkey, partner_id=i.partner_id)[1:] 
    for obj in objs: 
     obj.delete() 

这样,你删除所有,但第一个返回SurveyResults。当然,假设你的结果是按照最新的顺序排列的,因为你表示你想保持最新的。