{"title":"Ionstraimíocht bunachar sonraí","version":"6.1","locale":"ga","docname":"topics/db/instrumentation","url":"/ga/6.1/topics/db/instrumentation/","canonical":"https://djangodocs.dev/ga/6.1/topics/db/instrumentation/","summary":"Chun cabhrú leat na ceisteanna a eisíonn do chód a thuiscint agus a rialú, soláthraíonn Django crúca chun feidhmeanna fillte a shuiteáil timpeall ar…","html":"<h1>Ionstraimíocht bunachar sonraí<a class=\"heading-anchor\" href=\"#database-instrumentation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Chun cabhrú leat na ceisteanna a eisíonn do chód a thuiscint agus a rialú, soláthraíonn Django crúca chun feidhmeanna fillte a shuiteáil timpeall ar fhiosruithe bunachar sonraí a fhorghní Mar shampla, is féidir le fillteoirí ceisteanna a chomhaireamh, fad na fiosrúcháin a thomhas, ceisteanna logála, nó fiú cosc a chur ar fhorghníomhú ceisteanna (m.sh. chun a chinntiú nach n-eisítear aon cheisteanna agus teimpléad á rindreáil le sonraí réamhf</p>\n<p>Déantar na fillteáin a mhúnlú tar éis: doc: middleware - is glaonna iad a ghlac&lt;/topics/http/middleware&gt; ann glaoch eile mar cheann dá n-argóintí. Glaonn siad ar an glaoch sin chun an cheist bunachar sonraí (fillte b'fhéidir) a ghairm, agus is féidir leo an méid a theastaíonn uathu a dhéanamh timpeall an ghlao sin. Cruthaítear agus suiteáiltear iad, áfach, le cód úsáideora, agus mar sin ní theastaíonn monarcha ar leithligh uathu mar a dhéanann middleware.</p>\n<p>Déantar fillteán a shuiteáil i mbainisteoir comhthéacs - mar sin tá na fillteáin sealadach agus go sonrach le sreabhadh éigin i do chód.</p>\n<p>Mar a luadh thuas, is sampla de fhillteán ná blocaire forghníomhaithe fiosrúcháin. D'fhéadfadh cuma seo a bheith 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\">def</span> <span class=\"nf\">blocker</span><span class=\"p\">(</span><span class=\"o\">*</span>args<span class=\"p\">):</span>\n    <span class=\"k\">raise</span> <span class=\"ne\">Exception</span><span class=\"p\">(</span><span class=\"s2\">&quot;No database access allowed here.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Agus úsáidfí é d'fhonn ceisteanna ón teimpléad a bhac mar sin:</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=\"nn\">django.db</span> <span class=\"kn\">import</span> connection\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> render\n\n\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    context <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"o\">...</span><span class=\"p\">}</span>  <span class=\"c1\"># Code to generate context with all data.</span>\n    template_name <span class=\"o\">=</span> <span class=\"o\">...</span>\n    <span class=\"k\">with</span> connection<span class=\"o\">.</span>execute_wrapper<span class=\"p\">(</span>blocker<span class=\"p\">):</span>\n        <span class=\"k\">return</span> render<span class=\"p\">(</span>request<span class=\"p\">,</span> template_name<span class=\"p\">,</span> context<span class=\"p\">)</span>\n</code></pre></div>\n<p>Is iad na paraiméadair a sheoltar chuig na fillteáin ná:</p>\n<ul class=\"simple\">\n<li><p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>fhorghníomhach` - glaoch, ar chóir a ghairm leis an gcuid eile de na paraiméadair d'fhonn an cheist a fhorghníomhú.</p></li>\n<li><p><code class=\"docutils literal notranslate\">sql</code> - str`, an ceist SQL atá le seoladh chuig an mbunachar sonraí.</p></li>\n<li><p><code class=\"docutils literal notranslate\">params</code> - liosta/tiúpla de luachanna paraiméadar don ordú SQL, nó liosta/tiúpla de liosta/tuples más é <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>executemany () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>an glao fillte.</p></li>\n<li><p><code class=\"docutils literal notranslate\">`many ``- `bool</code> a thugann le fios an bhfuil executar ()` nó executemany () ``an glao a ghairmtear sa deireadh ()` (agus cibé an bhfuiltear ag súil go mbeidh params` ina seicheamh luachanna, nó seicheamh seicheamh luachanna).</p></li>\n<li><p><code class=\"docutils literal notranslate\">context</code> -- foclóir le sonraí breise faoi chomhthéacs an t-ionghairm. Áirítear leis seo an nasc agus an cúrsóir.</p></li>\n</ul>\n<p>Ag baint úsáide as na paraiméadair, d'fhéadfadh leagan beagán níos casta den bhlocóir ainm an nasc sa teachtaireacht earráide a áireamh:</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=\"nf\">blocker</span><span class=\"p\">(</span>execute<span class=\"p\">,</span> sql<span class=\"p\">,</span> params<span class=\"p\">,</span> many<span class=\"p\">,</span> context<span class=\"p\">):</span>\n    alias <span class=\"o\">=</span> context<span class=\"p\">[</span><span class=\"s2\">&quot;connection&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span>alias\n    <span class=\"k\">raise</span> <span class=\"ne\">Exception</span><span class=\"p\">(</span><span class=\"s2\">&quot;Access to database &#39;</span><span class=\"si\">{}</span><span class=\"s2\">&#39; blocked here&quot;</span><span class=\"o\">.</span>format<span class=\"p\">(</span>alias<span class=\"p\">))</span>\n</code></pre></div>\n<p>Le haghaidh sampla níos iomláine, d'fhéadfadh cuma seo a bheith ar logálaí ceisteanna:</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\">import</span> <span class=\"nn\">time</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">QueryLogger</span><span class=\"p\">:</span>\n    <span class=\"k\">def</span> <span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>queries <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__call__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> execute<span class=\"p\">,</span> sql<span class=\"p\">,</span> params<span class=\"p\">,</span> many<span class=\"p\">,</span> context<span class=\"p\">):</span>\n        current_query <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;sql&quot;</span><span class=\"p\">:</span> sql<span class=\"p\">,</span> <span class=\"s2\">&quot;params&quot;</span><span class=\"p\">:</span> params<span class=\"p\">,</span> <span class=\"s2\">&quot;many&quot;</span><span class=\"p\">:</span> many<span class=\"p\">}</span>\n        start <span class=\"o\">=</span> time<span class=\"o\">.</span>monotonic<span class=\"p\">()</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            result <span class=\"o\">=</span> execute<span class=\"p\">(</span>sql<span class=\"p\">,</span> params<span class=\"p\">,</span> many<span class=\"p\">,</span> context<span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"ne\">Exception</span> <span class=\"k\">as</span> e<span class=\"p\">:</span>\n            current_query<span class=\"p\">[</span><span class=\"s2\">&quot;status&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;error&quot;</span>\n            current_query<span class=\"p\">[</span><span class=\"s2\">&quot;exception&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> e\n            <span class=\"k\">raise</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            current_query<span class=\"p\">[</span><span class=\"s2\">&quot;status&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;ok&quot;</span>\n            <span class=\"k\">return</span> result\n        <span class=\"k\">finally</span><span class=\"p\">:</span>\n            duration <span class=\"o\">=</span> time<span class=\"o\">.</span>monotonic<span class=\"p\">()</span> <span class=\"o\">-</span> start\n            current_query<span class=\"p\">[</span><span class=\"s2\">&quot;duration&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> duration\n            <span class=\"bp\">self</span><span class=\"o\">.</span>queries<span class=\"o\">.</span>append<span class=\"p\">(</span>current_query<span class=\"p\">)</span>\n</code></pre></div>\n<p>Chun é seo a úsáid, chruthófá réad logger agus é a shuiteáil mar fhilleadh:</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=\"nn\">django.db</span> <span class=\"kn\">import</span> connection\n\nql <span class=\"o\">=</span> QueryLogger<span class=\"p\">()</span>\n<span class=\"k\">with</span> connection<span class=\"o\">.</span>execute_wrapper<span class=\"p\">(</span>ql<span class=\"p\">):</span>\n    do_queries<span class=\"p\">()</span>\n<span class=\"c1\"># Now we can print the log.</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span>ql<span class=\"o\">.</span>queries<span class=\"p\">)</span>\n</code></pre></div>\n<section id=\"connection-execute-wrapper\">\n<h2><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>nascach.execute_wrapper () ``<a class=\"heading-anchor\" href=\"#connection-execute-wrapper\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.connection.execute_wrapper\">\n<span class=\"sig-prename descclassname\">connection.</span><span class=\"sig-name descname\">execute_wrapper</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">wrapper</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.connection.execute_wrapper\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Filleann bainisteoir comhthéacs ar ais a shuiteálann, nuair a chuirtear isteach é, timpeall forghníomhaithe fiosrúcháin bunachar sonraí, agus nuair a bhíonn sé amach, baineann sé an fillteán Tá an fillteán suiteáilte ar an réad nasc snáithe áitiúil.</p>\n<p><code class=\"docutils literal notranslate\">wrapper</code> is a callable taking five arguments. It is called for every\nquery execution in the scope of the context manager, with arguments\n<code class=\"docutils literal notranslate\">execute</code>, <code class=\"docutils literal notranslate\">sql</code>, <code class=\"docutils literal notranslate\">params</code>, <code class=\"docutils literal notranslate\">many</code>, and <code class=\"docutils literal notranslate\">context</code> as described\nabove. It's expected to call <code class=\"docutils literal notranslate\">execute(sql, params, many, context)</code> and\nreturn the return value of that call.</p>\n</dd></dl>\n\n</section>","rootId":"database-instrumentation","toc":[{"title":"``nascach.execute_wrapper () ``","anchor":"connection-execute-wrapper","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Using Django","url":"/ga/6.1/topics/"},{"docname":"topics/db/index","title":"Samhlacha agus bunachair sonraí","url":"/ga/6.1/topics/db/"}],"prev":{"docname":"topics/db/optimization","title":"Optamú ar rochtain bunachar","url":"/ga/6.1/topics/db/optimization/"},"next":{"docname":"topics/db/fixtures","title":"Daingneáin","url":"/ga/6.1/topics/db/fixtures/"},"formats":{"html":"/ga/6.1/topics/db/instrumentation/","markdown":"/ga/6.1/topics/db/instrumentation.md","json":"/ga/6.1/topics/db/instrumentation.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/topics/db/instrumentation.txt","official":"https://docs.djangoproject.com/ga/6.1/topics/db/instrumentation/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}