Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django DatabaseError:SQL变量太多(筛选查询)_Sql_Django_Django Queryset - Fatal编程技术网

Django DatabaseError:SQL变量太多(筛选查询)

Django DatabaseError:SQL变量太多(筛选查询),sql,django,django-queryset,Sql,Django,Django Queryset,我正在尝试设计一个解决方案,并一直与之合作 到目前为止,我的解决方案在Django吐出并抛出一个数据库错误之前只适用于两个或三个筛选条件:SQL变量太多。我目前的理解是,这是由数据库限制(在本例中为sqlite3)引起的。我还认为,这个错误是代码差与数据库配置不足的标志。但我对SQL或QuerySet机制了解不够,无法知道程序员可以采取哪些措施来导致/避免此错误 我现在有以下问题: 一,。Django中的SQL变量是什么 二,。这些SQL变量如何在Django中累积 三,。这些SQL变量是如何在

我正在尝试设计一个解决方案,并一直与之合作

到目前为止,我的解决方案在Django吐出并抛出一个数据库错误之前只适用于两个或三个筛选条件:SQL变量太多。我目前的理解是,这是由数据库限制(在本例中为sqlite3)引起的。我还认为,这个错误是代码差与数据库配置不足的标志。但我对SQL或QuerySet机制了解不够,无法知道程序员可以采取哪些措施来导致/避免此错误

我现在有以下问题:

一,。Django中的SQL变量是什么

二,。这些SQL变量如何在Django中累积

三,。这些SQL变量是如何在Django中“刷新”的

四,。在下面的“查询代码”部分中,我正在做什么/没有做什么,以便引发此错误

models.py 来自django.db导入模型的

班级排名(models.Model):
name=models.CharField(最大长度=128,主键=True)
单位=型号。CharField(最大长度=4)#例如“g”|“kg”|“lb”|“oz”。。。
#在Python3上:def__str__(self):
def ___; unicode(自):
返回self.name
类别顶部安装(型号.型号):
pizzaID=models.CharField(最大长度=128)
顶部=型号。外键(顶部)
amount=models.FloatField()
#在Python3上:def__str__(self):
def ___; unicode(自):
返回self.topping.name
等级比萨饼(型号.型号):
name=models.CharField(最大长度=128,主键=True)
浇头=型号。多个多个字段(浇头安装)
#在Python3上:def__str__(self):
def ___; unicode(自):
返回self.name
查询代码
def屏幕查询(lte、gte):
topping_amounts=ToppingAmount.objects.all()
对于lte中的c:
坏=最高金额。筛选(最高金额pk=c[0])。筛选(金额gt=c[1])
对于坏天气的b:
最高金额=最高金额。排除(pizzaID=b.pizzaID)
对于gte中的c:
topping\u amountsg=ToppingAmount.objects.none()
prima_good=topping_amounts.filter(topping_name=c[0])。filter(amount_gte=c[1])
对于prima_good中的g:
topping_amountsg=topping_amountsg | topping_amounts.filter(pizzaID=g.pizzaID)
最高金额=最高金额g
pizzas=Pizza.objects.none()
对于最高金额的ta:
pizzas=pizzas | Pizza.objects.filter(pk=ta.pizzaID)
回程披萨
代码说明:
约束的形式为“数量”,>=|这可以解释问题。您是否已确定代码中的哪一行失败?(提供完整的堆栈跟踪)。请继续阅读。不幸的是,第一个链接并不能解释我的问题,因为提问者反复表明,他的问题在shell中没有被观察到。在该链接中发布的问题答案中也承认存在SQLite限制,因此出现了第三句。的第四句涉及到这样一个事实,即的讨论表明问题不在于SQLite,而在于查询。至于导致问题的确切查询,如果相应的外部列表具有大约四个元素,则是{forc in lte:}或{forc in gte:}循环中的任何一个。该数据库只有100个测试比萨饼和17个测试配料。正在建造的系统应该有超过10000个“比萨饼”和157个“配料”。外部查询列表{lte}和{gte}将不会有四个元素,但可能有100多个元素。我发现{forg g in prima_good:topping_amountsg=topping_amountsg{124; topping_amounts.filter(pizzaID=g.pizzaID)}运行了96次,然后停止并崩溃。在测试了一些查询方法之后,我已经能够将SQLite3数据库中的比萨饼数量增加到10000多个,查询条件的数量超过20个。查询现在在不到一秒钟的时间内运行。运行查询5000次只需58.61秒即可完成,并且不会产生“太多SQL变量”错误。我只会提供细节和解决方案给谷歌的同事,前提是首先回答了四个非常有效的问题。