{"title":"Idirbheart bunachar sonraí","version":"5.2","locale":"ga","docname":"topics/db/transactions","url":"/ga/5.2/topics/db/transactions/","canonical":"https://djangodocs.dev/ga/5.2/topics/db/transactions/","summary":"Tugann Django cúpla bealach duit chun a rialú conas a bhainistítear idirbhearta bunachar sonraí. Bainistiú idirbheart bunachar Link to this heading # Iompar…","html":"<span id=\"database-transactions\"></span><h1>Idirbheart bunachar sonraí<a class=\"heading-anchor\" href=\"#module-django.db.transaction\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Tugann Django cúpla bealach duit chun a rialú conas a bhainistítear idirbhearta bunachar sonraí.</p>\n<section id=\"managing-database-transactions\">\n<h2>Bainistiú idirbheart bunachar<a class=\"heading-anchor\" href=\"#managing-database-transactions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"django-s-default-transaction-behavior\">\n<h3>Iompar idirbheart réamhshocraithe Django<a class=\"heading-anchor\" href=\"#django-s-default-transaction-behavior\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Is é iompar réamhshocraithe Django rith i mód autocommit. Tá gach ceist tiomanta láithreach don bhunachar sonraí, mura bhfuil idirbheart gníomhach. &lt;autocommit-details&gt;:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Féach thíos le haghaidh sonraí <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n<p>&lt;topics-db-queries-update&gt;Úsáideann Django idirbhearta nó pointí sábhála go huathoibríoch chun sláine oibríochtaí ORM a ráthú a dteastaíonn ceisteanna iolracha uathu, go háirithe:ref: delete () &lt;topics-db-queries-delete&gt;`agus: ref: `update () ceisteanna.</p>\n<p>Django's:class: ~django.test.testcase a fhilleann rang gach tástáil in idirbheart ar chúiseanna feidhmíochta freisin.</p>\n</section>\n<section id=\"tying-transactions-to-http-requests\">\n<span id=\"id1\"></span><h3>Idirbhearta a cheangal le hiarratais HTTP<a class=\"heading-anchor\" href=\"#tying-transactions-to-http-requests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Bealach coitianta chun idirbhearta a láimhseáil ar an ngréasán is ea gach iarratas a fhilleadh in idirbheart. Socraigh: Socrú: ATOMIC_REQUESTS go <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;DATABASE-ATOMIC_REQUESTS&gt;True</span></code> i gcumraíocht gach bunachar sonraí ar mhaith leat an t-iompar seo a chumasú dó.</p>\n<p>Oibríonn sé mar seo. Sula nglaonn sé ar fheidhm amharc, tosaíonn Django idirbheart. Má tháirgtear an freagra gan fadhbanna, déanann Django an t-idirbheart a dhéanamh. Má tháirgeann an dearcadh eisceacht, rollann Django an t-idirbheart ar ais.</p>\n<p>Féadfaidh tú fo-idirbhearta a dhéanamh ag baint úsáide as pointí sábhála i do chód amharc, de ghnáth leis an mbainisteoir comhthéacs: func: atomic. Mar sin féin, ag deireadh an dearcadh, déanfar na hathruithe go léir nó aon cheann de na hathruithe a dhéanamh.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>Cé go bhfuil simplíocht an tsamhail idirbheart seo tarraingteach, fágann sé go bhfuil sé neamhéifeachtach freisin nuair a mhéadaíonn trácht. Tá roinnt lasbhaird ag oscailt idirbheart do gach radharc. Braitheann an tionchar ar fheidhmíocht ar phatrúin cheisteanna d'iarratais agus ar cé chomh maith agus a láimhseálann do bhunachar sonraí</p>\n</aside>\n<aside class=\"admonition-per-request-transactions-and-streaming-responses admonition\">\n<p class=\"admonition-title\">Idirbhearta agus freagraí sruthú de réir iarrat</p>\n<p>Nuair a fhilleann amharc a:class: ~django.http.StreamInghttPresponse, is minic a fhorghníomhaítear ábhar an fhreagra cód chun an t-ábhar a ghiniúint. Ós rud é go bhfuil an dearcadh ar ais cheana féin, ritheann an cód sin lasmuigh den idirbheart.</p>\n<p>Go ginearálta, ní mholtar scríobh chuig an mbunachar sonraí agus freagra sruthú á ghiniúint, ós rud é nach bhfuil aon bhealach ciallmhar ann chun earráidí a láimhseáil tar éis tosú ag seoladh an fhreagra.</p>\n</aside>\n<p>Go praiticiúil, fillteann an ghné seo gach feidhm amharc sa maisitheoir: func: atomic a thuairiscítear thíos.</p>\n<p>Tabhair faoi deara nach bhfuil ach forghníomhú do dhearcadh faoi iúl sna hidirbhearta. Ritheann Middleware lasmuigh den idirbheart, agus mar sin déanann rindreáil freagraí teimpléid.</p>\n<p>Nuair a bhíonn: SETTING: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>ATOMIC_REQUESTS &lt;DATABASE-ATOMIC_REQUESTS&gt;`cumasaithe, is féidir fós tuairimí a chosc ó rith in idirbheart.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.transaction.non_atomic_requests\">\n<span class=\"sig-name descname\"><span class=\"pre\">non_atomic_requests</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</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.transaction.non_atomic_requests\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>&lt;DATABASE-ATOMIC_REQUESTS&gt;Déanfaidh an maisitheoir seo diúltú ar éifeacht de:setting: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>ATOMIC_REQUESTS <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>le haghaidh radharc ar leith:</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\">transaction</span>\n\n\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">non_atomic_requests</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">do_stuff</span><span class=\"p\">()</span>\n\n\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">non_atomic_requests</span><span class=\"p\">(</span><span class=\"n\">using</span><span class=\"o\">=</span><span class=\"s2\">&quot;other&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_other_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">do_stuff_on_the_other_database</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Ní oibríonn sé ach má chuirtear i bhfeidhm é ar an radharc féin.</p>\n</dd></dl>\n\n</section>\n<section id=\"controlling-transactions-explicitly\">\n<h3>Idirbheart a rialú go sainrá<a class=\"heading-anchor\" href=\"#controlling-transactions-explicitly\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Soláthraíonn Django API amháin chun idirbhearta bunachar sonraí a rialú.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.transaction.atomic\">\n<span class=\"sig-name descname\"><span class=\"pre\">atomic</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</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\">savepoint</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">durable</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.transaction.atomic\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Is é atomicity maoin sainmhínithe idirbhearta bunachar sonraí. Ligeann <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>atomic` dúinn bloc cód a chruthú ina ndéantar an t-atomacht ar an mbunachar sonraí a ráthú. Má chuirtear an bloc cód i gcrích go rathúil, tá na hathruithe tiomanta don bhunachar sonraí. Má tá eisceacht ann, déantar na hathruithe a rolladh ar ais.</p>\n<p>Is féidir bloic <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>atomic` a neadú. Sa chás seo, nuair a chríochnaíonn bloc istigh go rathúil, is féidir a éifeachtaí a rolladh ar ais fós má ardaítear eisceacht sa bhloc seachtrach ag pointe níos déanaí.</p>\n<p>Uaireanta bíonn sé úsáideach a chinntiú gurb é bloc <code class=\"docutils literal notranslate\"><span class=\"pre\">atomic`</span> <span class=\"pre\">an</span> <span class=\"pre\">bloc</span> <span class=\"pre\">`atomic`</span> <span class=\"pre\">is</span> <span class=\"pre\">seachtrach</span> <span class=\"pre\">i</span> <span class=\"pre\">gcónaí,</span> <span class=\"pre\">ag</span> <span class=\"pre\">cinntiú</span> <span class=\"pre\">go</span> <span class=\"pre\">ndéantar</span> <span class=\"pre\">aon</span> <span class=\"pre\">athruithe</span> <span class=\"pre\">bunachar</span> <span class=\"pre\">sonraí</span> <span class=\"pre\">nuair</span> <span class=\"pre\">a</span> <span class=\"pre\">bhíonn</span> <span class=\"pre\">an</span> <span class=\"pre\">bloc</span> <span class=\"pre\">amach</span> <span class=\"pre\">gan</span> <span class=\"pre\">earráidí.</span> <span class=\"pre\">Tugtar</span> <span class=\"pre\">marthanacht</span> <span class=\"pre\">air</span> <span class=\"pre\">seo</span> <span class=\"pre\">agus</span> <span class=\"pre\">is</span> <span class=\"pre\">féidir</span> <span class=\"pre\">é</span> <span class=\"pre\">a</span> <span class=\"pre\">bhaint</span> <span class=\"pre\">amach</span> <span class=\"pre\">trí</span> <span class=\"pre\">“durable=True”</span> <span class=\"pre\">a</span> <span class=\"pre\">shocrú.</span> <span class=\"pre\">Má</span> <span class=\"pre\">tá</span> <span class=\"pre\">an</span> <span class=\"pre\">bloc</span> <span class=\"pre\">``atomic`</span> <span class=\"pre\">neadaithe</span> <span class=\"pre\">laistigh</span> <span class=\"pre\">de</span> <span class=\"pre\">bhealach</span> <span class=\"pre\">eile</span> <span class=\"pre\">ardaíonn</span> <span class=\"pre\">sé</span> <span class=\"pre\">``Runtimeerror</span></code>.</p>\n<p>Is féidir <code class=\"docutils literal notranslate\"><span class=\"pre\">atomic</span></code> inúsáidte araon mar a:py:term: decorator:</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\">transaction</span>\n\n\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">viewfunc</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"c1\"># This code executes inside a transaction.</span>\n    <span class=\"n\">do_stuff</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>agus mar a: py:term: bainisteoir comhthéacsaí:</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\">transaction</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">viewfunc</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"c1\"># This code executes in autocommit mode (Django&#39;s default).</span>\n    <span class=\"n\">do_stuff</span><span class=\"p\">()</span>\n\n    <span class=\"k\">with</span> <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span><span class=\"p\">():</span>\n        <span class=\"c1\"># This code executes inside a transaction.</span>\n        <span class=\"n\">do_more_stuff</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Ceadaíonn timfhilleadh <code class=\"docutils literal notranslate\"><span class=\"pre\">atomic</span></code> i mbloc trialachta/seachas amháin go ndéanfar earráidí sláine a láimhseáil nádúrtha:</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\">IntegrityError</span><span class=\"p\">,</span> <span class=\"n\">transaction</span>\n\n\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">viewfunc</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">create_parent</span><span class=\"p\">()</span>\n\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"k\">with</span> <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span><span class=\"p\">():</span>\n            <span class=\"n\">generate_relationships</span><span class=\"p\">()</span>\n    <span class=\"k\">except</span> <span class=\"n\">IntegrityError</span><span class=\"p\">:</span>\n        <span class=\"n\">handle_exception</span><span class=\"p\">()</span>\n\n    <span class=\"n\">add_children</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Sa sampla seo, fiú má tá earráid bunachar sonraí ina chúis le generate_relations () ``trí shrianadh sláine a bhriseadh, is féidir leat ceisteanna a fhorghníomhú i `add_children ()`, agus tá na hathruithe ó <code class=\"docutils literal notranslate\"><span class=\"pre\">create_parent</span> <span class=\"pre\">()</span> <span class=\"pre\">``fós</span> <span class=\"pre\">ann</span> <span class=\"pre\">agus</span> <span class=\"pre\">ceangailte</span> <span class=\"pre\">leis</span> <span class=\"pre\">an</span> <span class=\"pre\">idirbheart</span> <span class=\"pre\">céanna.</span> <span class=\"pre\">Tabhair</span> <span class=\"pre\">faoi</span> <span class=\"pre\">deara</span> <span class=\"pre\">go</span> <span class=\"pre\">mbeidh</span> <span class=\"pre\">aon</span> <span class=\"pre\">oibríochtaí</span> <span class=\"pre\">a</span> <span class=\"pre\">dhéanfar</span> <span class=\"pre\">iarracht</span> <span class=\"pre\">i</span> <span class=\"pre\">`generate_relations</span> <span class=\"pre\">()</span> <span class=\"pre\">``rolladh</span> <span class=\"pre\">ar</span> <span class=\"pre\">ais</span> <span class=\"pre\">go</span> <span class=\"pre\">sábháilte</span> <span class=\"pre\">cheana</span> <span class=\"pre\">féin</span> <span class=\"pre\">nuair</span> <span class=\"pre\">a</span> <span class=\"pre\">thugtar</span> <span class=\"pre\">``handle_exception</span> <span class=\"pre\">()</span></code>, ionas gur féidir leis an láimhseálaí eisceachta oibriú ar an mbunachar sonraí más gá.</p>\n<aside class=\"admonition-avoid-catching-exceptions-inside-atomic admonition\">\n<p class=\"admonition-title\">Seachain eisceachtaí a ghabháil taobh istigh de atomic!</p>\n<p>Agus tú ag imeacht as bloc <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>atomic`, féachann Django ar an bhfuil sé ag imeacht de ghnáth nó le heisceacht chun a chinneadh an ndéanfaidh sé tiomantas nó rolladh siar. Má ghlacann tú agus má láimhseálann tú eisceachtaí taobh istigh de bhloc atomic, féadfaidh tú a cheilt ó Django go bhfuil fadhb tharla. D'fhéadfadh iompar gan choinne a bheith mar thoradh air seo.</p>\n<p>Is imní é seo den chuid is mó le haghaidh: exc: ~django.db.databaseError agus a fho-aicmí mar: exc: ~django.db.integrityError. Tar éis earráid den sórt sin, bristear an t-idirbheart agus déanfaidh Django rolladh ar ais ag deireadh an bhloc atomic. Má dhéanann tú iarracht ceisteanna bunachar sonraí a reáchtáil sula dtarlaíonn an rolladh ar ais, ardóidh Django a:class: ~django.db.transaction.transactionManagementError. D'fhéadfá teacht ar an iompar seo freisin nuair a ardaíonn láimhseálaí comhartha a bhaineann le ORM eisceacht.</p>\n<p>Tá an bealach ceart chun earráidí bunachar sonraí a ghabháil timpeall ar bhloc <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>atomic` mar a thaispeántar thuas. Más gá, cuir bloc breise <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>atomic` leis chun na críche seo. Tá buntáiste eile ag an bpatrún seo: déanann sé teorannú go sainráite cé na hoibríochtaí a rollófar ar ais má tharlaíonn eisceacht.</p>\n<p>Má ghlacann tú eisceachtaí arna ardú ag ceisteanna amh SQL, tá iompar Django neamhshonraithe agus ag brath ar bhunachar sonraí.</p>\n</aside>\n<aside class=\"admonition-you-may-need-to-manually-revert-app-state-when-rolling-back-a-transaction admonition\">\n<p class=\"admonition-title\">B'fhéidir go mbeidh ort stát an aip a chur ar ais de láimh agus idirbheart á rolladh ar ais.</p>\n<p>Ní chuirfear luachanna réimsí samhail ar ais nuair a tharlaíonn aistriú idirbheart. D'fhéadfadh stát samhail neamhchomhsheasmhach a bheith mar thoradh air seo mura gcuireann tú na luachanna réimse bunaidh ar ais</p>\n<p>Mar shampla, mar gheall ar <code class=\"docutils literal notranslate\"><span class=\"pre\">MyModel</span></code> le réimse <code class=\"docutils literal notranslate\"><span class=\"pre\">gníomha</span></code>, cinntíonn an snippet seo go n-úsáideann an seiceáil if obj.active` ag an deireadh an luach ceart má theipeann nuashonrú <code class=\"docutils literal notranslate\"><span class=\"pre\">gníomha</span></code> go True` san idirbheart:</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\">DatabaseError</span><span class=\"p\">,</span> <span class=\"n\">transaction</span>\n\n<span class=\"n\">obj</span> <span class=\"o\">=</span> <span class=\"n\">MyModel</span><span class=\"p\">(</span><span class=\"n\">active</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">active</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n<span class=\"k\">try</span><span class=\"p\">:</span>\n    <span class=\"k\">with</span> <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span><span class=\"p\">():</span>\n        <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n<span class=\"k\">except</span> <span class=\"n\">DatabaseError</span><span class=\"p\">:</span>\n    <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">active</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n\n<span class=\"k\">if</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">:</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>Baineann sé seo freisin le haon mheicníocht eile a d'fhéadfadh stát aip a shealbhú, mar shampla caching nó athróga domhanda. Mar shampla, má nuashonraíonn an cód sonraí sa taisce go réamhghníomhach tar éis réad a shábháil, moltar úsáid:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>transaction.on_commit () &lt;performing-actions-after-commit&gt;`ina ionad sin, chun athruithe taisce a chur siar go dtí go ndéanfar an t-idirbheart i ndáiríre.</p>\n</aside>\n<p>D'fhonn atomacht a ráthú, déanann <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>atomic` roinnt APIs a dhíchumasú. Ardóidh iarracht staid uathchomhcheangail an nasc bunachar sonraí a thiomantas, a rolladh siar nó a athrú laistigh de bhloc atomic, ardóidh eisceacht.</p>\n<p>Glacann <code class=\"docutils literal notranslate\"><span class=\"pre\">atomic`</span> <span class=\"pre\">argóint</span> <span class=\"pre\">``úsáid</span></code> ar chóir gurb é ainm bunachar sonraí. Mura gcuirtear an argóint seo ar fáil, úsáideann Django an bunachar sonraí <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>&quot;réamhshocraithe”.</p>\n<p>Faoin gcochall, cód bainistíochta idirbheart Django:</p>\n<ul class=\"simple\">\n<li><p>osclaíonn sé idirbheart agus tú ag dul isteach sa bhloc “atomach” is seachtrach;</p></li>\n<li><p>cruthaíonn sé pointe sábhála agus tú ag dul isteach i mbloc <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>atomic` istigh;</p></li>\n<li><p>scaoileann nó rollaíonn sé ar ais chuig an bpointe sábhála agus tú ag imeacht as bloc istigh;</p></li>\n<li><p>geallann nó rollann siar an idirbheart agus é ag imeacht an bhloc is seachtrach.</p></li>\n</ul>\n<p>Is féidir leat cruthú pointí sábhála do bhloic istigh a dhíchumasú tríd an argóint <code class=\"docutils literal notranslate\"><span class=\"pre\">savepoint</span></code> a shocrú go <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>. Má tharlaíonn eisceacht, déanfaidh Django an rolladh siar agus é ag imeacht an chéad bhloc tuismitheora le pointe sábhála má tá ceann ann, agus an bloc is seachtrach a shlí eile. Tá atomacht fós ráthaithe ag an idirbheart seachtrach. Níor cheart an rogha seo a úsáid ach amháin má tá laochaird na bpointí sábhála le feiceáil. Tá an mhíbhuntáiste aige an láimhseáil earráide a thuairiscítear thuas</p>\n<p>Féadfaidh tú <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>atomic` a úsáid nuair a mhúchtar autocommit. Ní úsáidfidh sé ach pointí sábhála, fiú don bhloc is seachtrach.</p>\n</dd></dl>\n\n<aside class=\"admonition-performance-considerations admonition\">\n<p class=\"admonition-title\">Creithniúcháin</p>\n<p>Tá costas feidhmíochta ag idirbhearta oscailte do do fhreastalaí bunachar Chun an lascaire seo a íoslaghdú, coinnigh d'idirbhearta chomh gearr agus is féidir Tá sé seo tábhachtach go háirithe má tá tú ag úsáid: func: atomic i bpróisis fhada, lasmuigh de thimthriall iarrata/freagartha Django.</p>\n</aside>\n</section>\n</section>\n<section id=\"autocommit\">\n<h2>Uathchomhaontú<a class=\"heading-anchor\" href=\"#autocommit\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"why-django-uses-autocommit\">\n<span id=\"autocommit-details\"></span><h3>Cén fáth a n-úsáideann Django autocommit<a class=\"heading-anchor\" href=\"#why-django-uses-autocommit\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Sna caighdeáin SQL, tosaíonn gach ceist SQL idirbheart, mura bhfuil ceann gníomhach cheana féin. Caithfear idirbhearta den sórt sin a dhéanamh go sainráite nó a rolladh ar ais.</p>\n<p>Níl sé seo áisiúil i gcónaí d'fhorbróirí feidhmchlár. Chun an fhadhb seo a mhaolú, soláthraíonn an chuid is mó de na bunachair sonraí modh Nuair a dhéantar autocommit a chasadh air agus nach bhfuil aon idirbheart gníomhach, filtear gach ceist SQL ina idirbheart féin. Is é sin le rá, ní amháin go dtosaíonn gach ceist den sórt sin idirbheart, ach déantar an t-idirbheart tiomanta nó a rolladh ar ais go huathoibríoch freisin, ag brath ar éirigh leis an bhfiosrú.</p>\n<p><span class=\"target\" id=\"index-0\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0249/\"><strong>PEP 249</strong></a>, the Python Database API Specification v2.0, requires autocommit to\nbe initially turned off. Django overrides this default and turns autocommit\non.</p>\n<p>Chun é seo a sheachaint, is féidir leat: ref: bainistíocht an idirbheart a dhíghníomhachtú &lt;deactivate-transaction-management&gt;, ach ní mholtar é.</p>\n</section>\n<section id=\"deactivating-transaction-management\">\n<span id=\"deactivate-transaction-management\"></span><h3>Bainistíocht idirbheart a dhígh<a class=\"heading-anchor\" href=\"#deactivating-transaction-management\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Is féidir leat bainistíocht idirbheart Django a dhíchumasú go hiomlán do bhunachar sonraí ar leith trí shocrú: “AUTOCOMMIT” go <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>False &lt;DATABASE-AUTOCOMMIT&gt;`ina chumraíocht. Má dhéanann tú é seo, ní chumasóidh Django autocommit, agus ní dhéanfaidh sé aon gealltanais. Gheobhaidh tú iompar rialta leabharlann bunachar sonraí bunúsach.</p>\n<p>Éilíonn sé seo ort gach idirbheart a dhéanamh go sainráite, fiú iad siúd a thosaigh Django nó ag leabharlanna tríú páirtí. Dá bhrí sin, is fearr é seo a úsáid i gcásanna inar mian leat do mheánearraí rialaithe idirbhearta féin a reáchtáil nó rud éigin an-aisteach a dhéanamh.</p>\n</section>\n</section>\n<section id=\"performing-actions-after-commit\">\n<span id=\"id2\"></span><h2>Gníomhartha a dhéanamh tar éis tiom<a class=\"heading-anchor\" href=\"#performing-actions-after-commit\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Uaireanta ní mór duit gníomh a dhéanamh a bhaineann leis an idirbheart reatha bunachar sonraí, ach amháin má dhéanann an t-idirbheart go rathúil. D'fhéadfadh tasc cúlra, fógra ríomhphoist, nó neamhbhailíú taisce a bheith san áireamh samplaí.</p>\n<p><a class=\"reference internal\" href=\"#django.db.transaction.on_commit\" title=\"django.db.transaction.on_commit\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">on_commit()</span></code></a> allows you to register callbacks that will be executed after\nthe open transaction is successfully committed:</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.transaction.on_commit\">\n<span class=\"sig-name descname\"><span class=\"pre\">on_commit</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">func</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</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\">robust</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.transaction.on_commit\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Rith feidhm, nó aon ghlaoch, chuig:func: on_commit:</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\">transaction</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">send_welcome_email</span><span class=\"p\">():</span> <span class=\"o\">...</span>\n\n\n<span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">on_commit</span><span class=\"p\">(</span><span class=\"n\">send_welcome_email</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Ní chuirfear aon argóintí ar ais, ach is féidir leat iad a cheangal le:func: functools.partial:</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\">functools</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">partial</span>\n\n<span class=\"k\">for</span> <span class=\"n\">user</span> <span class=\"ow\">in</span> <span class=\"n\">users</span><span class=\"p\">:</span>\n    <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">on_commit</span><span class=\"p\">(</span><span class=\"n\">partial</span><span class=\"p\">(</span><span class=\"n\">send_invite_email</span><span class=\"p\">,</span> <span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">user</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Glaofar ar ais tar éis don idirbheart oscailte a dhéanamh go rathúil. Má dhéantar an t-idirbheart a rolladh ar ais ina ionad sin (de ghnáth nuair a ardaítear eisceacht neamh-láimhseáilte i bhloc:func: atomic), caithfear an glaoch ar ais, agus ní ghlaofar air riamh.</p>\n<p>Má ghlaonn tú ar <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>on_commit () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>cé nach bhfuil idirbheart oscailte ann, déanfar an glaoch ar ais a fhorghníomhú láithreach.</p>\n<p>Uaireanta bíonn sé úsáideach aisghlaonna a chlárú a d'fhéadfadh teipeadh orthu. Trí <code class=\"docutils literal notranslate\"><span class=\"pre\">robust=True</span></code> is féidir leis na chéad ghlaonna eile a fhorghníomhú fiú má chaitheann an ceann reatha eisceacht. Gafa agus logáiltear gach earráid a dhíorthaítear ó rang <code class=\"docutils literal notranslate\"><span class=\"pre\">Exception`</span> <span class=\"pre\">Python</span> <span class=\"pre\">agus</span> <span class=\"pre\">logáiltear</span> <span class=\"pre\">chuig</span> <span class=\"pre\">an</span> <span class=\"pre\">logger</span> <span class=\"pre\">``django.db.backends.base</span></code>.</p>\n<p>Is féidir leat: meth: .testcase.captureonCommitCallbacks a úsáid chun glaonna a chláraithe le: func: on_commit a thástáil.</p>\n<section id=\"savepoints\">\n<h3>Sábháilteachta<a class=\"heading-anchor\" href=\"#savepoints\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Láimhseáiltear pointí sábhála (ie neasted:func: bloic atomic) i gceart. Is é sin, glaofar ar:func: on_commit inghlaonta tar éis sábhála (i mbloc neastad:func: atomic) tar éis an t-idirbheart seachtrach a dhéanamh, ach ní má tharla rolladh ar ais chuig an bpointe sábhála sin nó aon phointe sábhála roimhe seo le linn an idirbheart:</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\">transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span><span class=\"p\">():</span>  <span class=\"c1\"># Outer atomic, start a new transaction</span>\n    <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">on_commit</span><span class=\"p\">(</span><span class=\"n\">foo</span><span class=\"p\">)</span>\n\n    <span class=\"k\">with</span> <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span><span class=\"p\">():</span>  <span class=\"c1\"># Inner atomic block, create a savepoint</span>\n        <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">on_commit</span><span class=\"p\">(</span><span class=\"n\">bar</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># foo() and then bar() will be called when leaving the outermost block</span>\n</code></pre></div>\n<p>Ar an láimh eile, nuair a dhéantar pointe sábhála a rolladh ar ais (mar gheall ar eisceacht a ardaítear), ní ghlaofar ar an glaoch istigh:</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\">transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span><span class=\"p\">():</span>  <span class=\"c1\"># Outer atomic, start a new transaction</span>\n    <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">on_commit</span><span class=\"p\">(</span><span class=\"n\">foo</span><span class=\"p\">)</span>\n\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"k\">with</span> <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span><span class=\"p\">():</span>  <span class=\"c1\"># Inner atomic block, create a savepoint</span>\n            <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">on_commit</span><span class=\"p\">(</span><span class=\"n\">bar</span><span class=\"p\">)</span>\n            <span class=\"k\">raise</span> <span class=\"n\">SomeError</span><span class=\"p\">()</span>  <span class=\"c1\"># Raising an exception - abort the savepoint</span>\n    <span class=\"k\">except</span> <span class=\"n\">SomeError</span><span class=\"p\">:</span>\n        <span class=\"k\">pass</span>\n\n<span class=\"c1\"># foo() will be called, but not bar()</span>\n</code></pre></div>\n</section>\n<section id=\"order-of-execution\">\n<h3>Ordú forghníomhaithe<a class=\"heading-anchor\" href=\"#order-of-execution\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Déantar feidhmeanna ar thiomantas d'idirbheart ar leith a fhorghníomhú san ord a cláraíodh iad.</p>\n</section>\n<section id=\"exception-handling\">\n<h3>Láimhseáil eisce<a class=\"heading-anchor\" href=\"#exception-handling\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Má ardaíonn feidhm ar thiomantas amháin atá cláraithe le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>robust=false <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>laistigh d'idirbheart ar leith eisceacht gan ghabháil, ní rithfidh aon fheidhmeanna cláraithe níos déanaí san idirbheart céanna sin. Is é seo an t-iompar céanna agus dá gcuirfeá na feidhmeanna a fhorghníomhú go seicheamhach tú féin gan: func: on_commit.</p>\n</section>\n<section id=\"timing-of-execution\">\n<h3>Uainiú forghníomhú<a class=\"heading-anchor\" href=\"#timing-of-execution\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Cuirtear do ghlaonna a fhorghníomhacht* tar éis tiomantas rathúil, mar sin ní chuirfidh teip ar ais glaonna faoi deara go dtiocfaidh an t-idirbheart ar ais. Déantar iad a fhorghníomhú go coinníollach ar rath leis an idirbheart, ach níl* cuid* den idirbheart iad. Maidir leis na cásanna úsáide atá beartaithe (fógraí ríomhphoist, tascanna cúlra, srl.), Ba chóir go mbeadh sé seo go breá. Mura bhfuil sé (má tá do ghníomh leantach chomh ríthábhachtach gur chóir go gciallódh a theip go dteipfeadh an idirbheart féin), ansin níl tú ag iarraidh an crúca:func: on_commit a úsáid. &lt;249 #optional -two-phase-commit-extensions&gt;Ina áit sin, b'fhéidir gur mhaith leat <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>coimite dhá chéim' _ mar thacaíocht prótacal Tiomanta Dhá Chéim psycopg &lt;psycopg:two-phase-commit&gt;`agus an:pep: <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>Síntí Tiomanta Dhá Chéim roghnach sa sonraíocht Python DB-API '.</p>\n<p>Ní reáchtáiltear aisghlaonna go dtí go ndéantar autocommit a athchóiriú ar an nasc tar éis an tiomanta (mar shlí eile d'osclódh aon cheisteanna a dhéantar i aisghlao idirbheart intuigthe, ag cosc ar an nasc dul ar ais isteach i mód autocommit).</p>\n<p>Nuair atá i mód autocommit agus lasmuigh de bhloc:func: atomic, rithfidh an fheidhm láithreach, ní ar thiomantas.</p>\n<p>&lt;DATABASE-ATOMIC_REQUESTS&gt;Ní oibríonn feidhmeanna ar chomhcheangal ach le: ref: modh autocommit `agus &lt;managing-autocommit&gt;la:func: `atomic (nó: setting: ATOMIC_REQUESTS) API idirbheart. Glaoi:func: on_commit nuair a dhéantar autocommit míchumasaithe agus nach bhfuil tú laistigh de bhloc adamhach beidh earráid mar thoradh air.</p>\n</section>\n<section id=\"use-in-tests\">\n<h3>Úsáid i dtástálacha<a class=\"heading-anchor\" href=\"#use-in-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django's:class: ~django.test.testcase fillteann rang gach tástáil in idirbheart agus rollaíonn sé an t-idirbheart sin ar ais tar éis gach tástála, d'fhonn aonrú tástála a sholáthar. Ciallaíonn sé seo nach ndéantar aon idirbheart riamh i ndáiríre, mar sin ní reáchtálfar d'aisghlaonna: func: on_commit riamh.</p>\n<p>Is féidir leat an teorannú seo a shárú trí:meth: .testcase.captureonCommitCallbacks a úsáid. Gabhann sé seo d'aisghlaonna: func: on_commit i liosta, rud a ligeann duit dearbhú a dhéanamh orthu, nó aithris a dhéanamh ar an idirbheart a dhéantar trí ghlaoch orthu.</p>\n<p>Bealach eile chun an teorannú a shárú ná úsáid: class: ~django.test.transactionTestCase in ionad:class: ~django.test.testcase. Ciallaíonn sé seo go bhfuil d'idirbhearta tiomanta, agus rithfidh na haisghlaonna. Mar sin féin: Sruthlaíonn Class: ~Django.Test.TransactionTestCase an bunachar sonraí idir tástálacha, atá i bhfad níos moille ná: aicme: ~django.test.testcase aonrú.</p>\n</section>\n<section id=\"why-no-rollback-hook\">\n<h3>Cén fáth nach bhfuil crúca rollta ar ais?<a class=\"heading-anchor\" href=\"#why-no-rollback-hook\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Tá sé níos deacra crúca rollta a chur i bhfeidhm go láidir ná crúca tiomanta, ós rud é gur féidir le rudaí éagsúla a bheith ina chúis le rolladh intuigthe.</p>\n<p>Mar shampla, má thiteann do nasc bunachar sonraí toisc go maraíodh do phróiseas gan deis dúnadh go grásta, ní rithfidh do chrúca rollta riamh.</p>\n<p>Ach tá réiteach ann: in ionad rud éigin a dhéanamh le linn an bhloc adamhach (idirbheart) agus ansin é a dhíchur má theipeann ar an idirbheart, bain úsáid as: func: on_commit chun moill a dhéanamh ar é sa chéad áit go dtí tar éis éireoidh leis an idirbheart. Tá sé i bhfad níos éasca rud a rinne tú riamh a chealú sa chéad áit!</p>\n</section>\n</section>\n<section id=\"low-level-apis\">\n<h2>APIs ar leibhéal íseal<a class=\"heading-anchor\" href=\"#low-level-apis\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>Is fearr i gcónaí:func: atomic más féidir ar chor ar bith. Déanann sé cuntas ar shainiúlachtaí gach bunachar sonraí agus cuireann sé cosc ar oibríochtaí neamhbhailí.</p>\n<p>Níl na APIs ar leibhéal íseal úsáideach ach má tá do bhainistíocht idirbheart féin á chur i bhfeidhm agat.</p>\n</aside>\n<section id=\"managing-autocommit\">\n<span id=\"id3\"></span><h3>Uathchomhaontú<a class=\"heading-anchor\" href=\"#managing-autocommit\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Soláthraíonn Django API sa mhodúl:mod: django.db.transaction chun staid autocommit gach nasc bunachar sonraí a bhainistiú.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.transaction.get_autocommit\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_autocommit</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</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.transaction.get_autocommit\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.transaction.set_autocommit\">\n<span class=\"sig-name descname\"><span class=\"pre\">set_autocommit</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">autocommit</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</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.transaction.set_autocommit\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Glacann na feidhmeanna seo argóint <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>úsáid <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>ar chóir gurb é ainm bunachar sonraí. Mura gcuirtear é ar fáil, úsáideann Django an bunachar sonraí <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>&quot;réamhshocraithe”.</p>\n<p>Cuirtear Autocommit air ar dtús. Má chasann tú as é, tá sé de fhreagracht ort é a chur ar ais.</p>\n<p>Nuair a chasann tú autocommit as, gheobhaidh tú iompar réamhshocraithe d'oiriúnaitheoir bunachar sonraí, agus ní chabhróidh Django leat. Cé go sonraítear an t-iompar sin in:pep: 249, ní bhíonn cur i bhfeidhm oiriúnaitheoirí comhsheasmhach lena chéile i gcónaí. Déan athbhreithniú cúramach ar dhoiciméadú an chuibheora atá á úsáid agat</p>\n<p>Ní mór duit a chinntiú nach bhfuil aon idirbheart gníomhach, de ghnáth trí a: func: commit nó a:func: rollback a eisiúint, sula ndéanann tú autocommit ar ais.</p>\n<p>Diúltóidh Django autocommit a mhúchadh nuair a bheidh bloc: func: atomic gníomhach, toisc go mbriseadh sé sin atomacht.</p>\n</section>\n<section id=\"transactions\">\n<h3>Idirbhearta<a class=\"heading-anchor\" href=\"#transactions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Is tacar adamhach de cheisteanna bunachar sonraí é idirbheart. Fiú má tharlaíonn do chlár, ráthaíonn an bunachar sonraí go gcuirfear na hathruithe go léir i bhfeidhm, nó aon cheann acu.</p>\n<p>Ní sholáthraíonn Django API chun idirbheart a thosú. Is é an bealach a bhfuiltear ag súil leis chun idirbheart a thosú ná autocommit a dhíchumasú le:func: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>set_autocommit <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n<p>Nuair a bheidh tú in idirbheart, is féidir leat na hathruithe a rinne tú a chur i bhfeidhm go dtí an pointe seo le:func: commit, nó iad a chealú le:func: rollback. Sainmhínítear na feidhmeanna seo in:mod: django.db.transaction.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.transaction.commit\">\n<span class=\"sig-name descname\"><span class=\"pre\">commit</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</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.transaction.commit\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.transaction.rollback\">\n<span class=\"sig-name descname\"><span class=\"pre\">rollback</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</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.transaction.rollback\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Glacann na feidhmeanna seo argóint <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>úsáid <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>ar chóir gurb é ainm bunachar sonraí. Mura gcuirtear é ar fáil, úsáideann Django an bunachar sonraí <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>&quot;réamhshocraithe”.</p>\n<p>Diúltóidh Django tiomantas nó rolladh siar nuair a bheidh bloc: func: atomic gníomhach, toisc go mbriseadh sé sin atomacht.</p>\n</section>\n<section id=\"topics-db-transactions-savepoints\">\n<span id=\"id4\"></span><h3>Sábháilteachta<a class=\"heading-anchor\" href=\"#topics-db-transactions-savepoints\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Is marcóir laistigh d'idirbheart é pointe sábhála a chuireann ar do chumas cuid d'idirbheart a rolladh siar, seachas an t-idirbheart iomlán. Tá Savepoints ar fáil leis na cúltaca SQLite, PostgreSQL, Oracle, agus MySQL (agus an t-inneall stórála InnoDB á úsáid agat). Soláthraíonn cúltaca eile na feidhmeanna sábhála, ach is oibríochtaí folamh iad - ní dhéanann siad aon rud i ndáiríre.</p>\n<p>Níl pointí sábhála úsáideach go háirithe má tá tú ag úsáid autocommit, iompar réamhshocraithe Django. Mar sin féin, nuair a osclaíonn tú idirbheart le:func: atomic, tógann tú sraith oibríochtaí bunachar sonraí ag fanacht le tiomantas nó rolladh siar. Má eisíonn tú rolladh ar ais, déantar an t-idirbheart iomlán a rolladh ar ais. Soláthraíonn Savepoints an cumas rolladh mionghráinneach a dhéanamh, seachas an rolladh iomlán a dhéanfadh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>transaction.rollback () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p>\n<p>Nuair a dhéantar an maisitheoir:func: atomic neadaithe, cruthaíonn sé pointe sábhála chun tiomantas páirteach nó rolladh siar a cheadú. Spreagtar go láidir duit: func: atomic a úsáid seachas na feidhmeanna a thuairiscítear thíos, ach tá siad fós mar chuid den API poiblí, agus níl aon phlean ann chun iad a dhíchur.</p>\n<p>Glacann gach ceann de na feidhmeanna seo argóint <code class=\"docutils literal notranslate\"><span class=\"pre\">úsáid</span></code> ar chóir gurb é ainm bunachar sonraí lena mbaineann an t-iompar. Mura gcuirtear aon argóint <code class=\"docutils literal notranslate\"><span class=\"pre\">úsáid</span></code> ar fáil ansin úsáidtear an bunachar sonraí <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>&quot;réamhshocraithe”.</p>\n<p>Tá pointí sábhála á rialú ag trí fheidhm in:mod: django.db.transaction:</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.transaction.savepoint\">\n<span class=\"sig-name descname\"><span class=\"pre\">savepoint</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</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.transaction.savepoint\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Cruthaíonn sé pointe sábhála nua. Marcann sé seo pointe san idirbheart ar eol go bhfuil i stát “maith”. Tugann an t-aitheantas sábhála ar ais (sid`).</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.transaction.savepoint_commit\">\n<span class=\"sig-name descname\"><span class=\"pre\">savepoint_commit</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">sid</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</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.transaction.savepoint_commit\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Scaoileann sé savepoint <code class=\"docutils literal notranslate\"><span class=\"pre\">sid</span></code>. Tá na hathruithe a rinneadh ó cruthaíodh an pointe sábhála mar chuid den idirbheart.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.transaction.savepoint_rollback\">\n<span class=\"sig-name descname\"><span class=\"pre\">savepoint_rollback</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">sid</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</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.transaction.savepoint_rollback\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Rollaíonn sé an t-idirbheart ar ais chun sábháil <code class=\"docutils literal notranslate\"><span class=\"pre\">sid</span></code>.</p>\n</dd></dl>\n\n<p>Ní dhéanann na feidhmeanna seo aon rud mura dtacaítear le pointí sábhála nó má tá an bunachar sonraí i mód uathchomhcheangail.</p>\n<p>Ina theannta sin, tá feidhm fóntais ann:</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.transaction.clean_savepoints\">\n<span class=\"sig-name descname\"><span class=\"pre\">clean_savepoints</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</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.transaction.clean_savepoints\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Athshocraíonn sé an cuntar a úsáidtear chun IDanna uathúla sábhála a ghiniúint.</p>\n</dd></dl>\n\n<p>Taispeánann an sampla seo a leanas úsáid pointí sábhála:</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\">transaction</span>\n\n\n<span class=\"c1\"># open a transaction</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">viewfunc</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"c1\"># transaction now contains a.save()</span>\n\n    <span class=\"n\">sid</span> <span class=\"o\">=</span> <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">savepoint</span><span class=\"p\">()</span>\n\n    <span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"c1\"># transaction now contains a.save() and b.save()</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">want_to_keep_b</span><span class=\"p\">:</span>\n        <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">savepoint_commit</span><span class=\"p\">(</span><span class=\"n\">sid</span><span class=\"p\">)</span>\n        <span class=\"c1\"># open transaction still contains a.save() and b.save()</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">savepoint_rollback</span><span class=\"p\">(</span><span class=\"n\">sid</span><span class=\"p\">)</span>\n        <span class=\"c1\"># open transaction now contains only a.save()</span>\n</code></pre></div>\n<p>Féadfar pointí sábhála a úsáid chun aisghabháil ó earráid bunachar sonraí trí aistriú páirteach a dhéanamh. Má tá tú ag déanamh seo taobh istigh de bhloc:func: atomic, déanfar an bloc iomlán a rolladh ar ais fós, toisc nach bhfuil a fhios aige gur láimhseáil tú an cás ag leibhéal níos ísle! Chun é seo a chosc, is féidir leat an t-iompar rollta a rialú leis na feidhmeanna seo a leanas.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.transaction.get_rollback\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_rollback</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</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.transaction.get_rollback\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.transaction.set_rollback\">\n<span class=\"sig-name descname\"><span class=\"pre\">set_rollback</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">rollback</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</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.transaction.set_rollback\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Cuireann an bhratach rollta ar ais go <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, cuirtear isteach ar ais agus tú ag imeacht an bhloc adamhach is taobh istigh. D'fhéadfadh sé seo a bheith úsáideach chun rolladh a spreagadh gan eisceacht a ardú.</p>\n<p>Cuireann é a shocrú go <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> cosc ar rolladh den sórt sin. Sula ndéanann tú é sin, déan cinnte go bhfuil an t-idirbheart a rolladh ar ais go pointe sábhála maith ar eolas laistigh den bhloc adamhach reatha! Seachas sin tá tú ag briseadh atomacht agus d'fhéadfadh éilliú sonraí tarlú.</p>\n</section>\n</section>\n<section id=\"database-specific-notes\">\n<h2>Nótaí sonracha bunachar sonraí<a class=\"heading-anchor\" href=\"#database-specific-notes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"savepoints-in-sqlite\">\n<span id=\"id5\"></span><h3>Sábháilteachta i SQLite<a class=\"heading-anchor\" href=\"#savepoints-in-sqlite\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Cé go dtacaíonn SQLite le pointí sábhála, ní fhágann locht i ndearadh an mhodúil: mod: sqlite3 is ar éigean iad inúsáidte.</p>\n<p>Nuair a dhéantar autocommit cumasaithe, ní bhíonn ciall ag pointí sábhála. Nuair a bhíonn sé díchumasaithe, tiomhann :mod: sqlite3 go hinneach roimh ráitis savepoint. (Go deimhin, déanann sé tiomantas roimh aon ráiteas seachas <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span></code>, INSERT`, UPDATE`, DELETE` agus <code class=\"docutils literal notranslate\"><span class=\"pre\">REPLACE</span></code>.) Tá dhá iarmhairtí ag an fabht seo:</p>\n<ul class=\"simple\">\n<li><p>Ní féidir na APIs leibhéal íseal le haghaidh pointí sábhála inúsáidte ach taobh istigh d'idirbheart i.e. taobh istigh de bhloc:func: atomic.</p></li>\n<li><p>Tá sé dodhéanta: func: atomic a úsáid nuair a mhúchtar autocommit.</p></li>\n</ul>\n</section>\n<section id=\"transactions-in-mysql\">\n<h3>Idirbhearta i MySQL<a class=\"heading-anchor\" href=\"#transactions-in-mysql\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Má tá MySQL á úsáid agat, d'fhéadfadh nó nach dtacaíonn do tháblaí le hidirbhearta; braitheann sé ar do leagan MySQL agus ar na cineálacha tábla atá á úsáid agat. (Le “cineálacha tábla,” ciallaímid rud éigin cosúil le “InnoDB” nó “MyISAM”.) Tá tréithe idirbheart MySQL lasmuigh de raon feidhme an ailt seo, ach tá <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>faisnéis faoi idirbhearta MySQL <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>_ ag an suíomh MySQL.</p>\n<p>Mura dtacaíonn do shocrú MySQL* le hidirbhearta, ansin feidhmeoidh Django i gcónaí i mód autocommit: déanfar ráitis a fhorghníomhú agus a thiomnamh a luaithe a ghlaofar orthu. Má thacaíonn do shocrú MySQL* le hidirbhearta, láimhseálfaidh Django idirbhearta mar a mhínítear sa doiciméad seo.</p>\n</section>\n<section id=\"handling-exceptions-within-postgresql-transactions\">\n<h3>Láimhseáil eisceachtaí laistigh d'idirbhearta PostgreSQL<a class=\"heading-anchor\" href=\"#handling-exceptions-within-postgresql-transactions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Níl an chuid seo ábhartha ach amháin má tá do bhainistíocht idirbheart féin á chur i bhfeidhm agat. Ní féidir leis an bhfadhb seo tarlú i mód réamhshocraithe Django agus láimhseálann: func: atomic é go huathoibríoch.</p>\n</aside>\n<p>Taobh istigh d'idirbheart, nuair a ardaíonn glao chuig cúrsóir PostgreSQL eisceacht (de ghnáth <code class=\"docutils literal notranslate\"><span class=\"pre\">IntegrityError</span></code>), teipeann ar gach SQL ina dhiaidh sin san idirbheart céanna leis an earráid “cuirtear an t-idirbheart reatha, neamhaird ar cheisteanna go dtí deireadh an bhloc idirbheart”. Cé nach dócha go n-ardóidh úsáid bhunúsach <code class=\"docutils literal notranslate\"><span class=\"pre\">save</span> <span class=\"pre\">()</span> <span class=\"pre\">``eisceacht</span> <span class=\"pre\">i</span> <span class=\"pre\">PostgreSQL,</span> <span class=\"pre\">tá</span> <span class=\"pre\">patrúin</span> <span class=\"pre\">úsáide</span> <span class=\"pre\">níos</span> <span class=\"pre\">airde</span> <span class=\"pre\">ann</span> <span class=\"pre\">a</span> <span class=\"pre\">d'fhéadfadh,</span> <span class=\"pre\">mar</span> <span class=\"pre\">shampla</span> <span class=\"pre\">rudaí</span> <span class=\"pre\">a</span> <span class=\"pre\">shábháil</span> <span class=\"pre\">le</span> <span class=\"pre\">réimsí</span> <span class=\"pre\">uathúla,</span> <span class=\"pre\">sábháil</span> <span class=\"pre\">ag</span> <span class=\"pre\">baint</span> <span class=\"pre\">úsáide</span> <span class=\"pre\">as</span> <span class=\"pre\">an</span> <span class=\"pre\">bhratach</span> <span class=\"pre\">```force_insert</span></code>/<code class=\"docutils literal notranslate\"><span class=\"pre\">force_updat</span></code>, nó SQL saincheaptha a ghairm.</p>\n<p>Tá bealaí éagsúla ann chun aisghabháil ón gcineál seo earráide.</p>\n<section id=\"transaction-rollback\">\n<h4>Aisghabháil idirbheart<a class=\"heading-anchor\" href=\"#transaction-rollback\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Is é an chéad rogha an t-idirbheart iomlán a rolladh ar ais. 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=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>  <span class=\"c1\"># Succeeds, but may be undone by transaction rollback</span>\n<span class=\"k\">try</span><span class=\"p\">:</span>\n    <span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>  <span class=\"c1\"># Could throw exception</span>\n<span class=\"k\">except</span> <span class=\"n\">IntegrityError</span><span class=\"p\">:</span>\n    <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">rollback</span><span class=\"p\">()</span>\n<span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>  <span class=\"c1\"># Succeeds, but a.save() may have been undone</span>\n</code></pre></div>\n<p>Ag glaoch ar <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>transaction.rollback () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>rollann an t-idirbheart iomlán ar ais. Caillfear aon oibríochtaí bunachar sonraí neamhthiomanta. Sa sampla seo, caillfeadh na hathruithe a rinne a.save () `, cé nach n-ardaigh an oibríocht sin aon earráid féin.</p>\n</section>\n<section id=\"savepoint-rollback\">\n<h4>Aisghabháil Savepoint<a class=\"heading-anchor\" href=\"#savepoint-rollback\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Is féidir leat:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>savepoints &lt;topics-db-transactions-savepoints&gt;`a úsáid chun méid rollta a rialú. Sula ndéanann tú oibríocht bunachar sonraí a d'fhéadfadh teipeadh air, is féidir leat an pointe sábhála a shocrú nó a nuashonrú; ar an mbealach sin, má theipeann ar an oibríocht, is féidir leat an oibríocht ciontaithe aonair a rolladh ar ais, seachas an t-idirbheart iomlán. 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=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>  <span class=\"c1\"># Succeeds, and never undone by savepoint rollback</span>\n<span class=\"n\">sid</span> <span class=\"o\">=</span> <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">savepoint</span><span class=\"p\">()</span>\n<span class=\"k\">try</span><span class=\"p\">:</span>\n    <span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>  <span class=\"c1\"># Could throw exception</span>\n    <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">savepoint_commit</span><span class=\"p\">(</span><span class=\"n\">sid</span><span class=\"p\">)</span>\n<span class=\"k\">except</span> <span class=\"n\">IntegrityError</span><span class=\"p\">:</span>\n    <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">savepoint_rollback</span><span class=\"p\">(</span><span class=\"n\">sid</span><span class=\"p\">)</span>\n<span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>  <span class=\"c1\"># Succeeds, and a.save() is never undone</span>\n</code></pre></div>\n<p>Sa sampla seo, ní dhéantar <code class=\"docutils literal notranslate\"><span class=\"pre\">a.save</span> <span class=\"pre\">()</span> <span class=\"pre\">``ar</span> <span class=\"pre\">ais</span> <span class=\"pre\">sa</span> <span class=\"pre\">chás</span> <span class=\"pre\">ina</span> <span class=\"pre\">ndéanann</span> <span class=\"pre\">``b.save</span> <span class=\"pre\">()</span></code> eisceacht.</p>\n</section>\n</section>\n</section>","rootId":"module-django.db.transaction","toc":[{"title":"Bainistiú idirbheart bunachar","anchor":"managing-database-transactions","children":[{"title":"Iompar idirbheart réamhshocraithe Django","anchor":"django-s-default-transaction-behavior","children":[]},{"title":"Idirbhearta a cheangal le hiarratais HTTP","anchor":"tying-transactions-to-http-requests","children":[]},{"title":"Idirbheart a rialú go sainrá","anchor":"controlling-transactions-explicitly","children":[]}]},{"title":"Uathchomhaontú","anchor":"autocommit","children":[{"title":"Cén fáth a n-úsáideann Django autocommit","anchor":"why-django-uses-autocommit","children":[]},{"title":"Bainistíocht idirbheart a dhígh","anchor":"deactivating-transaction-management","children":[]}]},{"title":"Gníomhartha a dhéanamh tar éis tiom","anchor":"performing-actions-after-commit","children":[{"title":"Sábháilteachta","anchor":"savepoints","children":[]},{"title":"Ordú forghníomhaithe","anchor":"order-of-execution","children":[]},{"title":"Láimhseáil eisce","anchor":"exception-handling","children":[]},{"title":"Uainiú forghníomhú","anchor":"timing-of-execution","children":[]},{"title":"Úsáid i dtástálacha","anchor":"use-in-tests","children":[]},{"title":"Cén fáth nach bhfuil crúca rollta ar ais?","anchor":"why-no-rollback-hook","children":[]}]},{"title":"APIs ar leibhéal íseal","anchor":"low-level-apis","children":[{"title":"Uathchomhaontú","anchor":"managing-autocommit","children":[]},{"title":"Idirbhearta","anchor":"transactions","children":[]},{"title":"Sábháilteachta","anchor":"topics-db-transactions-savepoints","children":[]}]},{"title":"Nótaí sonracha bunachar sonraí","anchor":"database-specific-notes","children":[{"title":"Sábháilteachta i SQLite","anchor":"savepoints-in-sqlite","children":[]},{"title":"Idirbhearta i MySQL","anchor":"transactions-in-mysql","children":[]},{"title":"Láimhseáil eisceachtaí laistigh d'idirbhearta PostgreSQL","anchor":"handling-exceptions-within-postgresql-transactions","children":[{"title":"Aisghabháil idirbheart","anchor":"transaction-rollback","children":[]},{"title":"Aisghabháil Savepoint","anchor":"savepoint-rollback","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/sql","title":"Fiosrúcháin SQL amh a dhéanamh","url":"/ga/5.2/topics/db/sql/"},"next":{"docname":"topics/db/multi-db","title":"Bunachair sonraí iliom","url":"/ga/5.2/topics/db/multi-db/"},"formats":{"html":"/ga/5.2/topics/db/transactions/","markdown":"/ga/5.2/topics/db/transactions.md","json":"/ga/5.2/topics/db/transactions.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/topics/db/transactions.txt","official":"https://docs.djangoproject.com/ga/5.2/topics/db/transactions/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}