{"title":"Fiosrúcháin SQL amh a dhéanamh","version":"5.2","locale":"ga","docname":"topics/db/sql","url":"/ga/5.2/topics/db/sql/","canonical":"https://djangodocs.dev/ga/5.2/topics/db/sql/","summary":"Tugann Django dhá bhealach duit chun ceisteanna SQL amh a dhéanamh: is féidir leat: meth: ` Manager.raw () ` a úsáid chun ` fiosruithe amh a dhéanamh agus instancí…","html":"<h1>Fiosrúcháin SQL amh a dhéanamh<a class=\"heading-anchor\" href=\"#performing-raw-sql-queries\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Tugann Django dhá bhealach duit chun ceisteanna SQL amh a dhéanamh: is féidir leat: meth: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Manager.raw () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>a úsáid chun <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>fiosruithe amh a dhéanamh agus instancí samhail a thabhairt ar ais <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">`</span></a>__, nó is féidir leat an ciseal samhail a sheachaint go hiomlán agus <a href=\"#id9\"><span class=\"problematic\" id=\"id10\">`</span></a>SQL saincheaptha a fhorghníomhú go díreach <a href=\"#id11\"><span class=\"problematic\" id=\"id12\">`</span></a>__.</p>\n<aside class=\"admonition-explore-the-orm-before-using-raw-sql admonition\">\n<p class=\"admonition-title\">Déan iniúchadh ar an ORM sula n-úsáideann tú SQL amh!</p>\n<p>Soláthraíonn an Django ORM go leor uirlisí chun ceisteanna a chur in iúl gan SQL amh a scríobh. Mar shampla:</p>\n<ul class=\"simple\">\n<li><p>Tá an: doc: QuerySet API fairsing &lt;/ref/models/querysets&gt;.</p></li>\n<li><p>Is féidir leat: meth: annotate &lt;.queryset.annotate&gt; agus:doc: aggregate ag baint úsáide as go leor feidhmean&lt;/topics/db/aggregation&gt; &lt;/ref/models/database-functions&gt; na bunachar sonraí ionsuite: doc: bunachar sonraí. Taobh amuigh de na cinn, is féidir leat: doc: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>abairtí ceisteanna saincheapaithe' &lt;/ref/models/expressions/&gt; a chruthú.</p></li>\n</ul>\n<p>Sula n-úsáidtear SQL amh, déan iniúchadh: doc: an ORM &lt;/topics/db/index&gt;. Fiafraigh ar cheann de:doc: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>na cainéil tacaíochta 'chun a fheiceáil an dtaca&lt;/faq/help&gt; íonn an ORM le do chás úsáide.</p>\n</aside>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>Ba chóir duit a bheith an-chúramach aon uair a scríobhann tú SQL amh. Gach uair a úsáideann tú é, ba cheart duit éalú i gceart aon pharaiméadair is féidir leis an úsáideoir a rialú trí <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>params' a úsáid d'fhonn cosaint a dhéanamh ar ionsaithe insteallta SQL. &lt;sql-injection-protection&gt;Léigh tuilleadh fao:ref: <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>Cosaint insteallta SQL <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>.</p>\n</aside>\n<section id=\"performing-raw-queries\">\n<span id=\"executing-raw-queries\"></span><h2>Fiosrúcháin amh a dhéanamh<a class=\"heading-anchor\" href=\"#performing-raw-queries\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Is féidir an modh bainisteora <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>raw () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>a úsáid chun ceisteanna SQL amh a dhéanamh a thugann cásanna samhail ar ais:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Manager.raw\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Manager.</span></span><span class=\"sig-name descname\"><span class=\"pre\">raw</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">raw_query</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">params</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">()</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">translations</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Manager.raw\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Tógann an modh seo fiosrúchán SQL amh, cuireann sé i bhfeidhm é, agus filleann sé sampla <code class=\"docutils literal notranslate\"><span class=\"pre\">Django.db.Models.Query.RawQuerySet</span> <span class=\"pre\">``ar</span> <span class=\"pre\">ais.</span> <span class=\"pre\">Is</span> <span class=\"pre\">féidir</span> <span class=\"pre\">an</span> <span class=\"pre\">sampla</span> <span class=\"pre\">``RawQuerySet</span></code> seo a athrú cosúil le gnáth:class: ~django.db.models.query.querySet chun cásanna réada a sholáthar.</p>\n<p>Is fearr é seo a léiriú le sampla. Cuir i gcás go bhfuil an tsamhail seo a leanas agat:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n    <span class=\"n\">birth_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Ansin d'fhéadfá SQL saincheaptha a fhorghníomhú mar sin:</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=\"k\">for</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">raw</span><span class=\"p\">(</span><span class=\"s2\">&quot;SELECT * FROM myapp_person&quot;</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">John Smith</span>\n<span class=\"go\">Jane Jones</span>\n</code></pre></div>\n<p>Níl an sampla seo an-spreagúil - tá sé díreach mar an gcéanna le rith <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Person.Objects.all () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>. Mar sin féin, tá dornán roghanna eile ag <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>raw () <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">``</span></a>a fhágann go bhfuil sé an-chumhachtach.</p>\n<aside class=\"admonition-model-table-names admonition\">\n<p class=\"admonition-title\">Ainmneacha tábla múnla</p>\n<p>Cá as a tháinig ainm an tábla <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Person` sa sampla sin?</p>\n<p>De réir réamhshocraithe, déanann Django ainm tábla bunachar sonraí amach trí “lipéad aip” an tsamhail a cheangal - an t-ainm a d'úsáid tú i manage.py startapp` - le hainm ranga an tsamhail, le béim eatarthu. Sa sampla ghlac muid leis go gcónaíonn an tsamhail <code class=\"docutils literal notranslate\"><span class=\"pre\">Person`</span> <span class=\"pre\">i</span> <span class=\"pre\">aip</span> <span class=\"pre\">darb</span> <span class=\"pre\">ainm</span> <span class=\"pre\">``myapp</span></code>, mar sin bheadh a tábla <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp_person</span></code>.</p>\n<p>Le haghaidh tuilleadh sonraí féach ar an doiciméadú don rogha: attr: ~Options.db_table, a ligeann duit ainm an tábla bunachar sonraí a shocrú de láimh freisin.</p>\n</aside>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>Ní dhéantar aon seiceáil ar an ráiteas SQL a chuirtear isteach chuig <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>.raw () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>. Tá Django ag súil go dtabharfaidh an ráiteas sraith sraitheanna ar ais ón mbunachar sonraí, ach ní dhéanann sé aon rud chun é sin a fhorfheidhmiú. Mura bhfilleann an cheist sraitheanna ar ais, beidh earráid (b'fhéidir criptic) mar thoradh air.</p>\n</aside>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>Má tá tú ag déanamh ceisteanna ar MySQL, tabhair faoi deara go bhféadfadh foréigean cineál ciúin MySQL a bheith ina chúis le torthaí gan choinne agus cineál Má fhiosraíonn tú ar cholún cineál sreangán, ach le luach sláimhir, cuirfidh MySQL na cineálacha na luachanna go léir sa tábla a chur i gcomhar sula ndéanann tú an comparáid. Mar shampla, má tá na luachanna <code class=\"docutils literal notranslate\"><span class=\"pre\">'abc'</span></code>, def'`` i do thábla agus má fhiosraíonn tú ar <code class=\"docutils literal notranslate\"><span class=\"pre\">WHERE</span> <span class=\"pre\">mycolumn=0</span></code>, meaitneoidh an dá shraith. Chun é seo a chosc, déan an clóscáil cheart sula n-úsáidtear an luach i bhfiosrúchán.</p>\n</aside>\n<section id=\"mapping-query-fields-to-model-fields\">\n<h3>Réimsí fiosrúcháin a mapáil go réimsí<a class=\"heading-anchor\" href=\"#mapping-query-fields-to-model-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Léarscáil <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>raw () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>réimsí san fhiosrúchán go réimsí ar an tsamhail go huathoibríoch.</p>\n<p>Ní cuma ord na réimsí i d'fhiosrúchán. Is é sin le rá, oibríonn an dá cheist seo a leanas go comhionann:</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=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">raw</span><span class=\"p\">(</span><span class=\"s2\">&quot;SELECT id, first_name, last_name, birth_date FROM myapp_person&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">raw</span><span class=\"p\">(</span><span class=\"s2\">&quot;SELECT last_name, birth_date, first_name, id FROM myapp_person&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Déantar meaitseáil de réir ainm. Ciallaíonn sé seo gur féidir leat clásail <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>AS <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>SQL a úsáid chun réimsí a mhapáil sna réimsí fiosrúcháin go réimsí samhlacha. Mar sin dá mbeadh tábla éigin eile agat ina raibh sonraí <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>Person` ann, d'fhéadfá é a mhapáil go héasca i gcásanna <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">``</span></a>Person`:</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=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">raw</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;&quot;</span>\n<span class=\"gp\">... </span><span class=\"s2\">    SELECT first AS first_name,</span>\n<span class=\"gp\">... </span><span class=\"s2\">           last AS last_name,</span>\n<span class=\"gp\">... </span><span class=\"s2\">           bd AS birth_date,</span>\n<span class=\"gp\">... </span><span class=\"s2\">           pk AS id,</span>\n<span class=\"gp\">... </span><span class=\"s2\">    FROM some_other_table</span>\n<span class=\"gp\">... </span><span class=\"s2\">    &quot;&quot;&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n</code></pre></div>\n<p>Chomh fada agus a mheaitseálann na hainmneacha, cruthófar na cásanna samhail i gceart.</p>\n<p>De rogha air sin, is féidir leat réimsí san fhiosrúchán a mhapáil chuig réimsí samhlacha ag baint úsáide as an argóint <code class=\"docutils literal notranslate\"><span class=\"pre\">aistriúcháin</span> <span class=\"pre\">``go</span> <span class=\"pre\">`raw</span> <span class=\"pre\">()</span></code>. Is foclóir é seo a mhapáil ainmneacha réimsí san fhiosrúchán ar ainmneacha réimsí ar an tsamhail. Mar shampla, d'fhéadfaí an cheist thuas a scríobh freisin:</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=\"n\">name_map</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;first&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;bd&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;birth_date&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">raw</span><span class=\"p\">(</span><span class=\"s2\">&quot;SELECT * FROM some_other_table&quot;</span><span class=\"p\">,</span> <span class=\"n\">translations</span><span class=\"o\">=</span><span class=\"n\">name_map</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"index-lookups\">\n<h3>Cuardaigh innéacs<a class=\"heading-anchor\" href=\"#index-lookups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Tacaíonn <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>raw () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>le hinnéacsú, mar sin mura dteastaíonn ach an chéad toradh uait is féidir leat scríobh:</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=\"n\">first_person</span> <span class=\"o\">=</span> <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">raw</span><span class=\"p\">(</span><span class=\"s2\">&quot;SELECT * FROM myapp_person&quot;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Mar sin féin, ní dhéantar an t-innéacsú agus an slisnú ag leibhéal an bhunachar sonraí. Má tá líon mór rudaí <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Person` agat i do bhunachar sonraí, tá sé níos éifeachtaí an cheist a theorannú ag an leibhéal SQL:</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=\"n\">first_person</span> <span class=\"o\">=</span> <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">raw</span><span class=\"p\">(</span><span class=\"s2\">&quot;SELECT * FROM myapp_person LIMIT 1&quot;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n</code></pre></div>\n</section>\n<section id=\"deferring-model-fields\">\n<h3>Réimsí samhail a chur ar iarchur<a class=\"heading-anchor\" href=\"#deferring-model-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Féadfar réimsí a fhágáil amach freisin:</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=\"n\">people</span> <span class=\"o\">=</span> <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">raw</span><span class=\"p\">(</span><span class=\"s2\">&quot;SELECT id, first_name FROM myapp_person&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Is cásanna samhail iarchurtha iad na rudaí <code class=\"docutils literal notranslate\"><span class=\"pre\">Person</span></code> a thugtar ar ais leis an gceist seo (féach: meth: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>~django.db.models.query.queryset.defer () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>). Ciallaíonn sé seo go luchtálfar na réimsí a fhágtar ón gceist ar éileamh. Mar shampla:</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=\"k\">for</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">raw</span><span class=\"p\">(</span><span class=\"s2\">&quot;SELECT id, first_name FROM myapp_person&quot;</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span>  <span class=\"c1\"># This will be retrieved by the original query</span>\n<span class=\"gp\">... </span>        <span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">,</span>  <span class=\"c1\"># This will be retrieved on demand</span>\n<span class=\"gp\">... </span>    <span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">John Smith</span>\n<span class=\"go\">Jane Jones</span>\n</code></pre></div>\n<p>Ó láithreacha seachtracha, is cosúil go bhfuil an chéad ainm agus an t-ainm deireanach aisghabháilte ag an gceist. Mar sin féin, d'eisigh an sampla seo 3 cheist i ndáiríre. Ní aisghabhadh ach na céadainmneacha tríd an bhfiosrúchán <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>raw () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>- aisghabhadh na hainmneacha deireanacha araon ar éileamh nuair a cuireadh priontáil iad.</p>\n<p>Níl ach réimse amháin ann nach féidir leat a fhágáil amach - an príomhréimse. Úsáideann Django an príomh-eochair chun cásanna samhail a aithint, mar sin caithfear é a áireamh i gcónaí i gceist amh. A: Class: Ardófar eisceacht ~django.core.exceptions.fieldDoesNotExist má dhéanann tú dearmad an príomh-eochair a áireamh.</p>\n</section>\n<section id=\"adding-annotations\">\n<h3>Anótaí a chur leis<a class=\"heading-anchor\" href=\"#adding-annotations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Is féidir leat ceisteanna a fhorghníomhú ina bhfuil réimsí nach bhfuil sainmhínithe ar an tsamhail. Mar shampla, d'fhéadfaimis feidhm <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>aois () PostgreSQL a úsáid <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>__ chun liosta daoine a bhfuil a n-aoiseanna a ríomh ag an mbunachar sonraí a fháil:</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=\"n\">people</span> <span class=\"o\">=</span> <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">raw</span><span class=\"p\">(</span><span class=\"s2\">&quot;SELECT *, age(birth_date) AS age FROM myapp_person&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"n\">people</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\"> is </span><span class=\"si\">%s</span><span class=\"s2\">.&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span> <span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">age</span><span class=\"p\">))</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">John is 37.</span>\n<span class=\"go\">Jane is 42.</span>\n<span class=\"go\">...</span>\n</code></pre></div>\n<p>&lt;func-expressions&gt;Is minic gur féidir leat SQL amh a úsáid chun anótaí a ríomh a sheachaint trí a: ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Func () abairt <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>a úsáid ina ionad sin.</p>\n</section>\n<section id=\"passing-parameters-into-raw\">\n<h3>Paraiméadair a chur isteach i <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>raw () ``<a class=\"heading-anchor\" href=\"#passing-parameters-into-raw\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Más gá duit ceisteanna paraiméadair a dhéanamh, is féidir leat an argóint params` a úsáid chun raw () `:</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=\"n\">lname</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Doe&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">raw</span><span class=\"p\">(</span><span class=\"s2\">&quot;SELECT * FROM myapp_person WHERE last_name = </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"n\">lname</span><span class=\"p\">])</span>\n</code></pre></div>\n<p>Is liosta nó foclóir paraiméadair é params'. Úsáidfidh tú áitealbhóirí ``%s` sa teaghrán fiosrúcháin le haghaidh liosta, nó <code class=\"docutils literal notranslate\"><span class=\"pre\">%</span> <span class=\"pre\">(key)</span> <span class=\"pre\">s</span></code> sealbhóirí áiteacha do fhoclóir (áit a gcuirtear eochair foclóra in ionad <code class=\"docutils literal notranslate\"><span class=\"pre\">eochair</span></code>), beag beann ar d'inneall bunachar sonraí. Cuirfear paraiméadair ón argóint <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>params' in ionad sealbhóirí áiteanna den sórt sin.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Ní thacaítear le paramaí foclóra leis an gcúltaca SQLite; leis an gcúltaca seo, ní mór duit paraiméadair a rith mar liosta.</p>\n</aside>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>** Ná húsáid formáidiú teaghrán ar fhiosrúcháin amh nó luaigh sealbhóirí áiteanna i do theagáin SQL! **</p>\n<p>Tá sé mealltach an cheist thuas a scríobh mar:</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=\"n\">query</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;SELECT * FROM myapp_person WHERE last_name = </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"n\">lname</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">raw</span><span class=\"p\">(</span><span class=\"n\">query</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>B'fhéidir go gceapfá freisin gur chóir duit do cheist a scríobh mar seo (le luachana timpeall <code class=\"docutils literal notranslate\"><span class=\"pre\">%s</span></code>):</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=\"n\">query</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;SELECT * FROM myapp_person WHERE last_name = &#39;</span><span class=\"si\">%s</span><span class=\"s2\">&#39;&quot;</span>\n</code></pre></div>\n<p>** Ná déan ceachtar de na botúin seo. **</p>\n<p>Mar a pléadh in:ref: sql-injection-protection, ag baint úsáide as an argóint params` agus na sealbhóirí áit a fhágáil gan luaite cosnaíonn tú ó <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`ionsaithe insteallta SQL`__</span></a>, saothrú coitianta ina ndéanann ionsaitheoirí SQL treallach a instealladh isteach i do bhunachar sonraí. Má úsáideann tú idirghabháil sreangáin nó má luann tú an sealbhóir iontu, tá tú i mbaol instealladh SQL.</p>\n</aside>\n</section>\n</section>\n<section id=\"executing-custom-sql-directly\">\n<span id=\"executing-custom-sql\"></span><h2>SQL saincheaptha a fhorghníomhú<a class=\"heading-anchor\" href=\"#executing-custom-sql-directly\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Uaireanta fion:meth: ní leor Manager.raw: b'fhéidir go mbeidh ort ceisteanna nach léarscálann go glan ar mhúnlaí a dhéanamh, nó ceisteanna <code class=\"docutils literal notranslate\"><span class=\"pre\">UPDATE</span></code>, INSERT`, nó DELETE` a fhorghníomhú go díreach.</p>\n<p>Sna cásanna seo, is féidir leat rochtain a fháil ar an mbunachar sonraí go díreach i gcónaí, ag ródú timpeall an chiseal múnla</p>\n<p>Léiríonn an réad <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.connection</span></code> an nasc réamhshocraithe bunachar sonraí. Chun an nasc bunachar sonraí a úsáid, glaoigh ar <code class=\"docutils literal notranslate\"><span class=\"pre\">connection.cursor</span> <span class=\"pre\">()</span> <span class=\"pre\">``chun</span> <span class=\"pre\">réad</span> <span class=\"pre\">cúrsóra</span> <span class=\"pre\">a</span> <span class=\"pre\">fháil.</span> <span class=\"pre\">Ansin,</span> <span class=\"pre\">glaoigh</span> <span class=\"pre\">ar</span> <span class=\"pre\">`cursor.execute</span> <span class=\"pre\">(sql,</span> <span class=\"pre\">[params])</span> <span class=\"pre\">``chun</span> <span class=\"pre\">an</span> <span class=\"pre\">SQL</span> <span class=\"pre\">agus</span> <span class=\"pre\">`cursor.fetchone</span> <span class=\"pre\">()</span></code> nó <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>cursor.fetchall () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a fhorghníomhú chun na sraitheanna mar thoradh air a thabhairt ar ais.</p>\n<p>Mar shampla:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">connection</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_custom_sql</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"k\">with</span> <span class=\"n\">connection</span><span class=\"o\">.</span><span class=\"n\">cursor</span><span class=\"p\">()</span> <span class=\"k\">as</span> <span class=\"n\">cursor</span><span class=\"p\">:</span>\n        <span class=\"n\">cursor</span><span class=\"o\">.</span><span class=\"n\">execute</span><span class=\"p\">(</span><span class=\"s2\">&quot;UPDATE bar SET foo = 1 WHERE baz = </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">baz</span><span class=\"p\">])</span>\n        <span class=\"n\">cursor</span><span class=\"o\">.</span><span class=\"n\">execute</span><span class=\"p\">(</span><span class=\"s2\">&quot;SELECT foo FROM bar WHERE baz = </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">baz</span><span class=\"p\">])</span>\n        <span class=\"n\">row</span> <span class=\"o\">=</span> <span class=\"n\">cursor</span><span class=\"o\">.</span><span class=\"n\">fetchone</span><span class=\"p\">()</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">row</span>\n</code></pre></div>\n<p>Chun cosaint a dhéanamh ar instealladh SQL, níor chóir duit luachana a áireamh timpeall na sealbhóirí %s` sa sreangán SQL.</p>\n<p>Tabhair faoi deara más mian leat comharthaí litriúla faoin gcéad a áireamh sa cheist, caithfidh tú iad a dhúbailt sa chás go bhfuil tú ag dul ar pharaiméadair:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"n\">cursor</span><span class=\"o\">.</span><span class=\"n\">execute</span><span class=\"p\">(</span><span class=\"s2\">&quot;SELECT foo FROM bar WHERE baz = &#39;30%&#39;&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">cursor</span><span class=\"o\">.</span><span class=\"n\">execute</span><span class=\"p\">(</span><span class=\"s2\">&quot;SELECT foo FROM bar WHERE baz = &#39;30</span><span class=\"si\">%%</span><span class=\"s2\">&#39; AND id = </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">])</span>\n</code></pre></div>\n<p>Má tá tú ag baint úsáidea:doc: níos mó ná bunachar sonraí amháin ', is féidir leat ``django.db.connections` &lt;/topics/db/multi-db&gt; a úsáid chun an nasc (agus an cúrsóir) a fháil le haghaidh bunachar sonraí ar leith. Is réad cosúil le foclóir é <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.connections</span></code> a ligeann duit nasc ar leith a aisghabháil ag baint úsáide as a ainm:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">connections</span>\n\n<span class=\"k\">with</span> <span class=\"n\">connections</span><span class=\"p\">[</span><span class=\"s2\">&quot;my_db_alias&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">cursor</span><span class=\"p\">()</span> <span class=\"k\">as</span> <span class=\"n\">cursor</span><span class=\"p\">:</span>\n    <span class=\"c1\"># Your code here</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>De réir réamhshocraithe, cuirfidh an Python DB API torthaí ar ais gan a n-ainmneacha réimse, rud a chiallaíonn go mbeidh liosta ``luachanna agat, seachas ``dict`. Ar chostas beag feidhmíochta agus cuimhne, is féidir leat torthaí a thabhairt ar ais mar <code class=\"docutils literal notranslate\"><span class=\"pre\">dict</span></code> trí rud éigin mar seo a úsáid:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">dictfetchall</span><span class=\"p\">(</span><span class=\"n\">cursor</span><span class=\"p\">):</span>\n<span class=\"w\">    </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Return all rows from a cursor as a dict.</span>\n<span class=\"sd\">    Assume the column names are unique.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">columns</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">col</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">col</span> <span class=\"ow\">in</span> <span class=\"n\">cursor</span><span class=\"o\">.</span><span class=\"n\">description</span><span class=\"p\">]</span>\n    <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"nb\">dict</span><span class=\"p\">(</span><span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"n\">columns</span><span class=\"p\">,</span> <span class=\"n\">row</span><span class=\"p\">))</span> <span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">cursor</span><span class=\"o\">.</span><span class=\"n\">fetchall</span><span class=\"p\">()]</span>\n</code></pre></div>\n<p>Rogha eile is ea úsáid:func: collections.namedtuple ó leabharlann caighdeánach Python. Is réad cosúil le feadán é <code class=\"docutils literal notranslate\"><span class=\"pre\">namedtuple</span></code> a bhfuil réimsí inrochtana ag cuardach tréithe; tá sé innéacsaithe agus in-athraithe freisin. Tá na torthaí inathraithe agus inrochtana trí ainmneacha réimse nó innéacsanna, rud a d'fhéadfadh a bheith úsáideach:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">collections</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">namedtuple</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">namedtuplefetchall</span><span class=\"p\">(</span><span class=\"n\">cursor</span><span class=\"p\">):</span>\n<span class=\"w\">    </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Return all rows from a cursor as a namedtuple.</span>\n<span class=\"sd\">    Assume the column names are unique.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">desc</span> <span class=\"o\">=</span> <span class=\"n\">cursor</span><span class=\"o\">.</span><span class=\"n\">description</span>\n    <span class=\"n\">nt_result</span> <span class=\"o\">=</span> <span class=\"n\">namedtuple</span><span class=\"p\">(</span><span class=\"s2\">&quot;Result&quot;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"n\">col</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">col</span> <span class=\"ow\">in</span> <span class=\"n\">desc</span><span class=\"p\">])</span>\n    <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"n\">nt_result</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">row</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">cursor</span><span class=\"o\">.</span><span class=\"n\">fetchall</span><span class=\"p\">()]</span>\n</code></pre></div>\n<p>Glacann na samplaí <code class=\"docutils literal notranslate\"><span class=\"pre\">dictfetchall</span> <span class=\"pre\">()</span> <span class=\"pre\">``agus</span> <span class=\"pre\">``namedtuplefetchall</span> <span class=\"pre\">()</span></code> ainmneacha colún uathúla, ós rud é nach féidir le cúrsóir idirdhealú a dhéanamh idir colúin ó tháblaí éagsúla.</p>\n<p>Seo sampla den difríocht idir na trí cinn:</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=\"n\">cursor</span><span class=\"o\">.</span><span class=\"n\">execute</span><span class=\"p\">(</span><span class=\"s2\">&quot;SELECT id, parent_id FROM test LIMIT 2&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">cursor</span><span class=\"o\">.</span><span class=\"n\">fetchall</span><span class=\"p\">()</span>\n<span class=\"go\">((54360982, None), (54360880, None))</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">cursor</span><span class=\"o\">.</span><span class=\"n\">execute</span><span class=\"p\">(</span><span class=\"s2\">&quot;SELECT id, parent_id FROM test LIMIT 2&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">dictfetchall</span><span class=\"p\">(</span><span class=\"n\">cursor</span><span class=\"p\">)</span>\n<span class=\"go\">[{&#39;parent_id&#39;: None, &#39;id&#39;: 54360982}, {&#39;parent_id&#39;: None, &#39;id&#39;: 54360880}]</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">cursor</span><span class=\"o\">.</span><span class=\"n\">execute</span><span class=\"p\">(</span><span class=\"s2\">&quot;SELECT id, parent_id FROM test LIMIT 2&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">results</span> <span class=\"o\">=</span> <span class=\"n\">namedtuplefetchall</span><span class=\"p\">(</span><span class=\"n\">cursor</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">results</span>\n<span class=\"go\">[Result(id=54360982, parent_id=None), Result(id=54360880, parent_id=None)]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">results</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">id</span>\n<span class=\"go\">54360982</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">results</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"go\">54360982</span>\n</code></pre></div>\n<section id=\"connections-and-cursors\">\n<h3>Naisc agus cúrsaí<a class=\"heading-anchor\" href=\"#connections-and-cursors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Forfheidhmíonn <code class=\"docutils literal notranslate\"><span class=\"pre\">nasc</span></code> agus <code class=\"docutils literal notranslate\"><span class=\"pre\">cursor</span></code> den chuid is mó an Python DB-API caighdeánach a thuairiscítear in:pep: 249 - ach &lt;/topics/db/transactions&gt; amháin maidir le: doc: láimhseáil idirbhearta.</p>\n<p>Mura bhfuil tú eolach ar an Python DB-API, tabhair faoi deara go n-úsáideann an ráiteas SQL i cursor.execute () ``sealbhóirí ionaid, `&quot;%s&quot;<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>, seachas paraiméadair a chur go díreach laistigh den SQL. Má úsáideann tú an teicníc seo, éalóidh an leabharlann bunachar sonraí bunúsach do pharaiméadair go huathoi</p>\n<p>Tabhair faoi deara freisin go bhfuil Django ag súil leis an áitealbhóir <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;%s&quot;</span></code>, * ní* an <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>”? <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>sealbhóir áit, a úsáideann na ceangail SQLite Python. Tá sé seo ar mhaithe le comhsheasmhacht agus sláine.</p>\n<p>Cúrsóir a úsáid mar bhainisteoir comhthéacs:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"k\">with</span> <span class=\"n\">connection</span><span class=\"o\">.</span><span class=\"n\">cursor</span><span class=\"p\">()</span> <span class=\"k\">as</span> <span class=\"n\">c</span><span class=\"p\">:</span>\n    <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">execute</span><span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>atá coibhéiseach le:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">connection</span><span class=\"o\">.</span><span class=\"n\">cursor</span><span class=\"p\">()</span>\n<span class=\"k\">try</span><span class=\"p\">:</span>\n    <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">execute</span><span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n<span class=\"k\">finally</span><span class=\"p\">:</span>\n    <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n</code></pre></div>\n<section id=\"calling-stored-procedures\">\n<h4>Nósanna imeachta stóráilte<a class=\"heading-anchor\" href=\"#calling-stored-procedures\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.CursorWrapper.callproc\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">CursorWrapper.</span></span><span class=\"sig-name descname\"><span class=\"pre\">callproc</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">procname</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">params</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">kparams</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.CursorWrapper.callproc\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Glaonn sé nós imeachta stóráilte bunachar sonraí leis an ainm tugtha. Féadfar seicheamh (params`) nó foclóir (kparams`) de pharaiméadair ionchuir a sholáthar. Ní thacaíonn an chuid is mó de na bunachair sonraí le <code class=\"docutils literal notranslate\"><span class=\"pre\">kparams</span></code>. De chúltaca ionsuite Django, ní thacaíonn ach Oracle leis.</p>\n<p>Mar shampla, de bharr an nós imeachta stóráilte seo i mbunachar sonraí Oracle:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</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=\"SQL code\"><code><span class=\"k\">CREATE</span><span class=\"w\"> </span><span class=\"k\">PROCEDURE</span><span class=\"w\"> </span><span class=\"ss\">&quot;TEST_PROCEDURE&quot;</span><span class=\"p\">(</span><span class=\"n\">v_i</span><span class=\"w\"> </span><span class=\"nb\">INTEGER</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">v_text</span><span class=\"w\"> </span><span class=\"n\">NVARCHAR2</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">))</span><span class=\"w\"> </span><span class=\"k\">AS</span>\n<span class=\"w\">    </span><span class=\"n\">p_i</span><span class=\"w\"> </span><span class=\"nb\">INTEGER</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"n\">p_text</span><span class=\"w\"> </span><span class=\"n\">NVARCHAR2</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">);</span>\n<span class=\"k\">BEGIN</span>\n<span class=\"w\">    </span><span class=\"n\">p_i</span><span class=\"w\"> </span><span class=\"p\">:</span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">v_i</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"n\">p_text</span><span class=\"w\"> </span><span class=\"p\">:</span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">v_text</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"p\">...</span>\n<span class=\"k\">END</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>Déanfaidh sé seo glaoch air:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"k\">with</span> <span class=\"n\">connection</span><span class=\"o\">.</span><span class=\"n\">cursor</span><span class=\"p\">()</span> <span class=\"k\">as</span> <span class=\"n\">cursor</span><span class=\"p\">:</span>\n    <span class=\"n\">cursor</span><span class=\"o\">.</span><span class=\"n\">callproc</span><span class=\"p\">(</span><span class=\"s2\">&quot;test_procedure&quot;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"s2\">&quot;test&quot;</span><span class=\"p\">])</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n</section>\n</section>","rootId":"performing-raw-sql-queries","toc":[{"title":"Fiosrúcháin amh a dhéanamh","anchor":"performing-raw-queries","children":[{"title":"Réimsí fiosrúcháin a mapáil go réimsí","anchor":"mapping-query-fields-to-model-fields","children":[]},{"title":"Cuardaigh innéacs","anchor":"index-lookups","children":[]},{"title":"Réimsí samhail a chur ar iarchur","anchor":"deferring-model-fields","children":[]},{"title":"Anótaí a chur leis","anchor":"adding-annotations","children":[]},{"title":"Paraiméadair a chur isteach i ``raw () ``","anchor":"passing-parameters-into-raw","children":[]}]},{"title":"SQL saincheaptha a fhorghníomhú","anchor":"executing-custom-sql-directly","children":[{"title":"Naisc agus cúrsaí","anchor":"connections-and-cursors","children":[{"title":"Nósanna imeachta stóráilte","anchor":"calling-stored-procedures","children":[]}]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Using Django","url":"/ga/5.2/topics/"},{"docname":"topics/db/index","title":"Samhlacha agus bunachair sonraí","url":"/ga/5.2/topics/db/"}],"prev":{"docname":"topics/db/managers","title":"Bainisteoirí","url":"/ga/5.2/topics/db/managers/"},"next":{"docname":"topics/db/transactions","title":"Idirbheart bunachar sonraí","url":"/ga/5.2/topics/db/transactions/"},"formats":{"html":"/ga/5.2/topics/db/sql/","markdown":"/ga/5.2/topics/db/sql.md","json":"/ga/5.2/topics/db/sql.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/topics/db/sql.txt","official":"https://docs.djangoproject.com/ga/5.2/topics/db/sql/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}