Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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
Python 3.x 使用Django queryset的最佳方法,JSONField!={}_Python 3.x_Django_Postgresql_Django Queryset_Postgresql Performance - Fatal编程技术网

Python 3.x 使用Django queryset的最佳方法,JSONField!={}

Python 3.x 使用Django queryset的最佳方法,JSONField!={},python-3.x,django,postgresql,django-queryset,postgresql-performance,Python 3.x,Django,Postgresql,Django Queryset,Postgresql Performance,我想要所有使用环境变量有一些密钥对的地方 class JobAnalysis(Base, XYZ): env_vars = JSONField( default=dict ) job = models.ForeignKey( Job, related_name='jobanalyses' ) seller = models.ForeignKey( ABC, null=True ) c

我想要所有使用环境变量有一些密钥对的地方

class JobAnalysis(Base, XYZ):
    env_vars = JSONField(
        default=dict
    )
    job = models.ForeignKey(
        Job, related_name='jobanalyses'
    )
    seller = models.ForeignKey(
        ABC,
        null=True
    )

class Usage(Base):
    job = models.ForeignKey(
        Job, null=True, blank=True
    )
我使用上面的queryset获取所有使用信息,其中seller为null,env_vars不等于{}

用法查询

但我在这里看到了性能问题,因为
.exclude(job\uu jobanalysis\uu env\u vars\uuu exact={})
创建内部查询,并且因为这个select语句是超时的

在seller为null且env_vars!={}

    usages_qs = Usage.objects.filter(
        job__jobanalyses__seller__isnull=True
    ).exclude(
        job__jobanalyses__env_vars__exact={}
    )
SELECT "Usage"."job",
FROM "Usage"
LEFT OUTER JOIN "Job" ON ("Usage"."job_id" = "Job"."id")
LEFT OUTER JOIN "JobAnalysis" ON ("Job"."id" = "JobAnalysis"."job_id")
WHERE ("JobAnalysis"."seller_id" IS NULL
       AND NOT ("Usage"."job_id" IN
                  (SELECT U2."job_id"
                   FROM "JobAnalysis" U2
                   WHERE U2."env_vars" = '{}')
                AND "Usage"."job_id" IS NOT NULL))