{"title":"PostgreSQL 特有查询表达式","version":"5.0","locale":"zh-hans","docname":"ref/contrib/postgres/expressions","url":"/zh-hans/5.0/ref/contrib/postgres/expressions/","canonical":"https://djangodocs.dev/zh-hans/5.0/ref/contrib/postgres/expressions/","summary":"这些表达式可以从 django.contrib.postgres.expressions 模块中获得。ArraySubquery 是一个 Subquery，使用 PostgreSQL 的 ARRAY 构造函数，从查询集中建立一个值列表…","html":"<span id=\"postgresql-specific-query-expressions\"></span><h1>PostgreSQL 特有查询表达式<a class=\"heading-anchor\" href=\"#module-django.contrib.postgres.expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>这些表达式可以从 <code class=\"docutils literal notranslate\">django.contrib.postgres.expressions</code> 模块中获得。</p>\n<section id=\"arraysubquery-expressions\">\n<h2><code class=\"docutils literal notranslate\">ArraySubquery()</code> 表达式<a class=\"heading-anchor\" href=\"#arraysubquery-expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.expressions.ArraySubquery\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ArraySubquery</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">queryset</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.expressions.ArraySubquery\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\">ArraySubquery</code> 是一个 <a class=\"reference internal\" href=\"/zh-hans/5.0/ref/models/expressions/#django.db.models.Subquery\" title=\"django.db.models.Subquery\"><code class=\"xref py py-class docutils literal notranslate\">Subquery</code></a>，使用 PostgreSQL 的 <code class=\"docutils literal notranslate\">ARRAY</code> 构造函数，从查询集中建立一个值列表，它必须使用 <a class=\"reference internal\" href=\"/zh-hans/5.0/ref/models/querysets/#django.db.models.query.QuerySet.values\" title=\"django.db.models.query.QuerySet.values\"><code class=\"xref py py-meth docutils literal notranslate\">QuerySet.values()</code></a> 来只返回一个列。</p>\n<p>这个类与 <a class=\"reference internal\" href=\"/zh-hans/5.0/ref/contrib/postgres/aggregates/#django.contrib.postgres.aggregates.ArrayAgg\" title=\"django.contrib.postgres.aggregates.ArrayAgg\"><code class=\"xref py py-class docutils literal notranslate\">ArrayAgg</code></a> 不同，它不作为一个聚合函数，也不需要一个 SQL <code class=\"docutils literal notranslate\">GROUP BY</code> 子句来建立值的列表。</p>\n<p>例如，如果您想要将作者的所有相关书籍注释为 JSON 对象：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> OuterRef\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> JSONObject\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.expressions</span> <span class=\"kn\">import</span> ArraySubquery\n<span class=\"gp\">&gt;&gt;&gt; </span>books <span class=\"o\">=</span> Book<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>author<span class=\"o\">=</span>OuterRef<span class=\"p\">(</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span>values<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    json<span class=\"o\">=</span>JSONObject<span class=\"p\">(</span>title<span class=\"o\">=</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">,</span> pages<span class=\"o\">=</span><span class=\"s2\">&quot;pages&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>books<span class=\"o\">=</span>ArraySubquery<span class=\"p\">(</span>books<span class=\"p\">))</span><span class=\"o\">.</span>first<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author<span class=\"o\">.</span>books\n<span class=\"go\">[{&#39;title&#39;: &#39;Solaris&#39;, &#39;pages&#39;: 204}, {&#39;title&#39;: &#39;The Cyberiad&#39;, &#39;pages&#39;: 295}]</span>\n</code></pre></div>\n</section>","rootId":"module-django.contrib.postgres.expressions","toc":[{"title":"ArraySubquery() 表达式","anchor":"arraysubquery-expressions","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API 参考","url":"/zh-hans/5.0/ref/"},{"docname":"ref/contrib/index","title":"contrib 包","url":"/zh-hans/5.0/ref/contrib/"},{"docname":"ref/contrib/postgres/index","title":"django.contrib.postgres","url":"/zh-hans/5.0/ref/contrib/postgres/"}],"prev":{"docname":"ref/contrib/postgres/constraints","title":"PostgreSQL 特有数据库约束","url":"/zh-hans/5.0/ref/contrib/postgres/constraints/"},"next":{"docname":"ref/contrib/postgres/fields","title":"PostgreSQL 特有模型字段","url":"/zh-hans/5.0/ref/contrib/postgres/fields/"},"formats":{"html":"/zh-hans/5.0/ref/contrib/postgres/expressions/","markdown":"/zh-hans/5.0/ref/contrib/postgres/expressions.md","json":"/zh-hans/5.0/ref/contrib/postgres/expressions.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/ref/contrib/postgres/expressions.txt","official":"https://docs.djangoproject.com/zh-hans/5.0/ref/contrib/postgres/expressions/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}