{"title":"Bunachair sonraí iliom","version":"6.1","locale":"ga","docname":"topics/db/multi-db","url":"/ga/6.1/topics/db/multi-db/","canonical":"https://djangodocs.dev/ga/6.1/topics/db/multi-db/","summary":"Déanann an treoir ábhair seo cur síos ar thacaíocht Django chun idirghníomhú le bunachair Glacann an chuid is mó den chuid eile de dhoiciméadú Django go bhfuil tú…","html":"<h1>Bunachair sonraí iliom<a class=\"heading-anchor\" href=\"#multiple-databases\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Déanann an treoir ábhair seo cur síos ar thacaíocht Django chun idirghníomhú le bunachair Glacann an chuid is mó den chuid eile de dhoiciméadú Django go bhfuil tú ag idirghníomhú le bunachar sonraí amháin. Más mian leat idirghníomhú le bunachair sonraí iolracha, beidh ort roinnt céimeanna breise a ghlacadh.</p>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">See also</p>\n<p>Féach: ref: testing-multi-db le haghaidh faisnéise faoi thástáil le bunachair sonraí iolracha.</p>\n</aside>\n<section id=\"defining-your-databases\">\n<h2>Sainmhíniú do bhunachar<a class=\"heading-anchor\" href=\"#defining-your-databases\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Is é an chéad chéim chun níos mó ná bunachar sonraí amháin a úsáid le Django ná insint do Django faoi na freastalaithe bunachar sonraí a bheidh á úsáid agat. Déantar é seo ag baint úsáide as an socrú:setting: DATABASES. Déanann an socrú seo mapáil ainmneacha bunachar sonraí, ar bealach iad chun tagairt a dhéanamh do bhunachar sonraí ar leith ar fud Django, chuig foclóir socruithe don nasc sonrach sin. Déantar cur síos iomlán ar na socruithe sna foclóirí istigh sa doiciméadach:setting: DATABASES.</p>\n<p>Is féidir le bunachair sonraí aon ainm a roghnaíonn tú a bheith Mar sin féin, tá tábhacht speisialta ag an alias <code class=\"docutils literal notranslate\">default</code>. Úsáideann Django an bunachar sonraí leis an alias de <code class=\"docutils literal notranslate\">default</code> nuair nach roghnaíodh aon bhunachar sonraí eile.</p>\n<p>Seo a leanas sampla <code class=\"docutils literal notranslate\">settings.py</code> snippet a shainmhíníonn dhá bhunachar sonraí - bunachar sonraí réamhshocraithe PostgreSQL agus bunachar sonraí MySQL ar a dtugtar <code class=\"docutils literal notranslate\">users</code>:</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>DATABASES <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;app_data&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.db.backends.postgresql&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;USER&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;postgres_user&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;PASSWORD&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;s3krit&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n    <span class=\"s2\">&quot;users&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;user_data&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.db.backends.mysql&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;USER&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;mysql_user&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;PASSWORD&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;priv4te&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>Mura bhfuil ciall ag coincheap bunachar sonraí réamhshocraithe` i gcomhthéacs do thionscadail, ní mór duit a bheith cúramach an bunachar sonraí a theastaíonn uait a úsáid a shonrú i gcónaí. Éilíonn Django go ndéanfar iontráil bunachar sonraí <code class=\"docutils literal notranslate\">default` a shainiú, ach is féidir foclóir na paraiméadair a fhágáil bán mura n-úsáidfear é. Chun seo a dhéanamh, ní mór duit:setting: `DATABASE_ROUTERS` a chur ar bun do mhúnlaí uile d'aipeanna, lena n-áirítear iad siúd in aon aipeanna contrib agus tríú páirtí atá á úsáid agat, ionas nach ndéanfar aon cheisteanna a atreorú chuig an mbunachar sonraí réamhshocraithe. Seo a leanas sampla ``settings.py</code> snippet a shainmhíníonn dhá bhunachar sonraí neamh-réamhshocraithe, agus an iontráil <code class=\"docutils literal notranslate\">default</code> fágtha folamh d'aon ghnó:</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>DATABASES <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span> <span class=\"p\">{},</span>\n    <span class=\"s2\">&quot;users&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;user_data&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.db.backends.mysql&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;USER&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;mysql_user&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;PASSWORD&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;superS3cret&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n    <span class=\"s2\">&quot;customers&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;customer_data&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.db.backends.mysql&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;USER&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;mysql_cust&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;PASSWORD&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;veryPriv@ate&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>Má dhéanann tú iarracht rochtain a fháil ar bhunachar sonraí nach bhfuil sainmhínithe agat i do shuíomh: DATABASES, ardóidh Django eisceacht <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Django.Utils.CONNECTION.CONNECTIONDOESNOTEXIST <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p>\n</section>\n<section id=\"synchronizing-your-databases\">\n<span id=\"synchronizing-multiple-databases\"></span><h2>Sioncrónú do bhunachar sonraí<a class=\"heading-anchor\" href=\"#synchronizing-your-databases\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Feidhmíonn an t-ordú bainistíochta: DJADmin: imirce ar bhunachar sonraí amháin ag an am. De réir réamhshocraithe, oibríonn sé ar an mbunachar sonraí <code class=\"docutils literal notranslate\">réamhshocraithe</code>, ach tríd an rogha: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>--database <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>a sholáthar, is féidir leat a rá dó bunachar sonraí difriúil a &lt;migrate --database&gt;shioncronú. Mar sin, chun gach samhail a shioncronú ar gach bunachar sonraí sa chéad shampla thuas, bheadh ort glaoch ar:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>$ ./manage.py migrate\n$ ./manage.py migrate --database<span class=\"o\">=</span>users\n</code></pre></div>\n<p>Mura dteastaíonn uait go ndéanfaí gach feidhmchlár a shioncronú le bunachar sonraí áirithe, is féidir leat a: ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>ródaire bunachar sonraí &lt;topics-db-multi-db-routing&gt;`a shainiú a chuireann beartas i bhfeidhm ag cur srian ar infhaighteacht samhlacha áirithe.</p>\n<p>Má d'fhág tú, mar atá sa dara sampla thuas, an bunachar sonraí <code class=\"docutils literal notranslate\">default</code> folamh, ní mór duit ainm bunachar sonraí a sholáthar gach uair a rith tú: djadmin: migrate. Trí ainm an bhunachar sonraí a fhágáil, d'ardódh earráid. Maidir leis an dara sampla:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>$ ./manage.py migrate --database<span class=\"o\">=</span>users\n$ ./manage.py migrate --database<span class=\"o\">=</span>customers\n</code></pre></div>\n<section id=\"using-other-management-commands\">\n<h3>Orduithe bainistíochta eile a úsáid<a class=\"heading-anchor\" href=\"#using-other-management-commands\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Oibríonn an chuid is mó d'orduithe <code class=\"docutils literal notranslate\">django-admin ``eile a idirghníomhaíonn leis an mbunachar sonraí ar an mbealach céanna le: djadmin: `migrate` - ní oibríonn siad riamh ar bhunachar sonraí amháin ag an am, ag baint úsáide as ``- bunachar sonraí</code> chun an bunachar sonraí a úsáidtear a rialú.</p>\n<p>Eisceacht ón riail seo is ea an t-ordú:djadmin: makemigrations. Bailíonn sé stair na himirce sna bunachair sonraí chun fadhbanna a ghabháil leis na comhaid imirce atá ann cheana féin (a d'fhéadfadh a bheith mar thoradh orthu a chur in eagar) sula gcruthaítear imirce nua. &lt;topics-db-multi-db-routing&gt;De réir réamhshocraithe, ní sheiceálann sé ach an bunachar sonraí <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>default`, ach déanann sé dul i gcomhairle leis an modh:meth: allow_migrate de:ref: ródair má tá aon cheann suiteáilte.</p>\n</section>\n</section>\n<section id=\"automatic-database-routing\">\n<span id=\"topics-db-multi-db-routing\"></span><h2>Ródú uathoibríoch bunachar<a class=\"heading-anchor\" href=\"#automatic-database-routing\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Is é an bealach is éasca le bunachair sonraí iolracha a úsáid ná scéim ródaithe bunachar sonraí a bhunú. Cinntíonn an scéim ródaithe réamhshocraithe go bhfanann rudaí 'greamaitheach' lena mbunachar sonraí bunaidh (ie, sábhálfar réad a aisghabhadh ón mbunachar sonraí foo' ar an mbunachar sonraí céanna). Cinntíonn an scéim ródaithe réamhshocraithe mura sonraítear bunachar sonraí, go dtagann gach ceist ar ais chuig an mbunachar sonraí `réamhshocraithe`.</p>\n<p>Ní gá duit aon rud a dhéanamh chun an scéim ródaithe réamhshocraithe a ghníomhachtú - cuirtear ar fáil í 'amach as an mbosca' ar gach tionscadal Django. Mar sin féin, más mian leat iompraíochtaí leithdháileadh bunachar sonraí níos spéisiúla a chur i bhfeidhm, is féidir leat do ródairí bunachar sonraí féin a shainiú agus</p>\n<section id=\"database-routers\">\n<h3>Ródaithe bunachar sonraí<a class=\"heading-anchor\" href=\"#database-routers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Is rang é Ródaire bunachar sonraí a sholáthraíonn suas le ceithre mhodh:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"db_for_read\">\n<span class=\"sig-name descname\">db_for_read</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model</em>, <em class=\"sig-param\"><span class=\"o\">**</span>hints</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#db_for_read\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Moltar an bunachar sonraí ba chóir a úsáid le haghaidh oibríochtaí léitheoireachta le haghaidh rudaí de chineál <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>samhail`.</p>\n<p>Má tá oibríocht bunachar sonraí in ann aon fhaisnéis bhreise a sholáthar a d'fhéadfadh cabhrú le bunachar sonraí a roghnú, cuirfear ar fáil sa bhfoclóir <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>leideanna <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>. &lt;topics-db-multi-db-hints&gt;Cuirtear sonraí ar leideanna bailí ar fáil: ref: <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>thíos <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">`</span></a>.</p>\n<p>Tugann sé ar ais <code class=\"docutils literal notranslate\">None</code> mura bhfuil aon mholadh ann.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"db_for_write\">\n<span class=\"sig-name descname\">db_for_write</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model</em>, <em class=\"sig-param\"><span class=\"o\">**</span>hints</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#db_for_write\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Moltar an bunachar sonraí ba chóir a úsáid le haghaidh scríobh rudaí de chineál Samhail.</p>\n<p>Má tá oibríocht bunachar sonraí in ann aon fhaisnéis bhreise a sholáthar a d'fhéadfadh cabhrú le bunachar sonraí a roghnú, cuirfear ar fáil sa bhfoclóir <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>leideanna <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>. &lt;topics-db-multi-db-hints&gt;Cuirtear sonraí ar leideanna bailí ar fáil: ref: <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>thíos <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">`</span></a>.</p>\n<p>Tugann sé ar ais <code class=\"docutils literal notranslate\">None</code> mura bhfuil aon mholadh ann.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"allow_relation\">\n<span class=\"sig-name descname\">allow_relation</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">obj1</em>, <em class=\"sig-param\">obj2</em>, <em class=\"sig-param\"><span class=\"o\">**</span>hints</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#allow_relation\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tabhair ar ais <code class=\"docutils literal notranslate\">True</code> má chóir gaol idir <code class=\"docutils literal notranslate\">obj1</code> agus obj2` a cheadú, <code class=\"docutils literal notranslate\">Fal</code> má chóir an gaol a chosc, nó <code class=\"docutils literal notranslate\">None</code> mura bhfuil aon tuairim ag an ródaire. Is oibríocht bailíochtaithe amháin é seo, a úsáidtear ag eochair eachtrach agus go leor oibríochtaí chun a chinneadh an cheart caidreamh a cheadú idir dhá réad.</p>\n<p>Mura bhfuil tuairim ag aon ródaire (ie filleann gach ródaire <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>None <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>), ní cheadaítear ach caidreamh laistigh den bhunachar sonraí céanna.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"allow_migrate\">\n<span class=\"sig-name descname\">allow_migrate</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">db</em>, <em class=\"sig-param\">app_label</em>, <em class=\"sig-param\">model_name<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>hints</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#allow_migrate\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Faigh amach an gceadaítear don oibríocht imirce a reáchtáil ar an mbunachar sonraí le alias <code class=\"docutils literal notranslate\">db</code>. Fill ar ais <code class=\"docutils literal notranslate\">True</code> más chóir go rithfeadh an oibríocht, <code class=\"docutils literal notranslate\">False</code> mura chóir dó rith, nó <code class=\"docutils literal notranslate\">None</code> mura bhfuil aon tuairim ag an ródaire.</p>\n<p>Is é an argóint seasaimh app_label` lipéad an fheidhmchláir atá á imirce.</p>\n<p>Socraítear <code class=\"docutils literal notranslate\">model_name</code> ag an gcuid is mó d'oibríochtaí imirce go luach <code class=\"docutils literal notranslate\">samhail. _meta.model_name</code> (an leagan íseal den tsamhail <code class=\"docutils literal notranslate\">__name__</code>) den tsamhail atá á imirce. Is é a luach <code class=\"docutils literal notranslate\">None</code> d'oibríochtaí: ~django.db.migrations.operations.runpython agus:class: ~django.db.migrations.operations.runsql mura soláthraíonn siad é ag baint úsáide as leideanna.</p>\n<p>Úsáideann oibríochtaí áirithe <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>leideanna <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>chun faisnéis bhreise a chur in iúl don ródaire.</p>\n<p>Nuair a shocraítear <code class=\"docutils literal notranslate\">model_name</code>, is gnách go mbíonn <code class=\"docutils literal notranslate\">hints</code> an rang samhail faoin eochair <code class=\"docutils literal notranslate\">`samhail</code>. Tabhair faoi deara go bhféadfadh sé a: ref: samhail stairiúil &lt;historical-models&gt;, agus dá bhrí sin nach bhfuil aon tréithe, modhanna nó bainisteoirí saincheaptha aige. Níor chóir duit brath ach ar <code class=\"docutils literal notranslate\">_meta</code>.</p>\n<p>Is féidir an modh seo a úsáid freisin chun infhaighteacht samhail ar bhunachar sonraí ar leith a chinneadh.</p>\n<p><a class=\"reference internal\" href=\"/ga/6.1/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\">makemigrations</code></a> always creates migrations for model changes, but\nif <code class=\"docutils literal notranslate\">allow_migrate()</code> returns <code class=\"docutils literal notranslate\">False</code>, any migration operations for the\n<code class=\"docutils literal notranslate\">model_name</code> will be silently skipped when running <a class=\"reference internal\" href=\"/ga/6.1/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">migrate</code></a> on\nthe <code class=\"docutils literal notranslate\">db</code>. Changing the behavior of <code class=\"docutils literal notranslate\">allow_migrate()</code> for models that\nalready have migrations may result in broken foreign keys, extra tables,\nor missing tables. When <a class=\"reference internal\" href=\"/ga/6.1/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\">makemigrations</code></a> verifies the migration\nhistory, it skips databases where no app is allowed to migrate.</p>\n</dd></dl>\n\n<p>Ní gá do ródaire na modhanna seo uach* a sholáthar - féadfaidh sé ceann amháin nó níos mó acu a fhágáil. Má fhágtar ceann de na modhanna, scipeánfaidh Django an ródaire sin agus an seiceáil ábhartha á ndéanamh agat.</p>\n<section id=\"hints\">\n<span id=\"topics-db-multi-db-hints\"></span><h4>Leideanna<a class=\"heading-anchor\" href=\"#hints\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Is féidir na leideanna a fhaigheann an ródaire bunachar sonraí a úsáid chun cinneadh a dhéanamh cén bunachar sonraí ba chóir iarratas ar leith a fháil.</p>\n<p>At present, the only hint that will be provided is <code class=\"docutils literal notranslate\">instance</code>, an\nobject instance that is related to the read or write operation that is\nunderway. This might be the instance that is being saved, or it might\nbe an instance that is being added in a many-to-many relation. In some\ncases, no instance hint will be provided at all. The router checks for\nthe existence of an instance hint, and determines if that hint should be\nused to alter routing behavior.</p>\n<p>If an <code class=\"docutils literal notranslate\">instance</code> hint is present, the database from which it was fetched\nis recorded on its <a class=\"reference internal\" href=\"/ga/6.1/ref/models/instances/#django.db.models.Model._state\" title=\"django.db.models.Model._state\"><code class=\"xref py py-attr docutils literal notranslate\">instance._state.db</code></a>.\nRouters will need to first consult that attribute before falling back to any\nfixed alias to match Django's default behavior of fetching related instances\nfrom the same database.</p>\n</section>\n</section>\n<section id=\"using-routers\">\n<h3>Úsáid ródairí<a class=\"heading-anchor\" href=\"#using-routers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Suiteáiltear ródairí bunachar sonraí ag baint úsáide as an socrú: setting: DATABASE_ROUTERS. Sainmhíníonn an socrú seo liosta d'ainmneacha ranga, gach ceann acu ag sonrú ródaire ar chóir an bunródaire a úsáid (<code class=\"docutils literal notranslate\">django.db.router</code>).</p>\n<p>Úsáideann oibríochtaí bunachar sonraí Django an ródaire bunachar sonraí chun úsáid bunachar sonraí a leithdháileadh. Aon uair a chaithfidh fiosrúchán a fháil amach cén bunachar sonraí atá le húsáid, glaonn sé ar an ródaire bonn, ag soláthar samhail agus leid (má tá sé ar fáil). Déanann an bunródaire iarracht gach rang ródaire ina dhiaidh sin go dtí go bhfilleann duine moladh bunachar sonraí. Mura dtugann aon ródairí moladh ar ais, déanann an ródaire bonn iarracht an reatha: attr: instance. _state.db &lt;django.db.models.Model._state&gt;`den chás leideanna. Mura soláthraíodh aon sampla leideanna, nó:attr: `instance. Is é _state.db &lt;django.db.models.Model._state&gt;```None `, leithdháileoidh an bunródaire an bunachar sonraí <code class=\"docutils literal notranslate\">réamhshocraithe</code>.</p>\n</section>\n<section id=\"an-example\">\n<h3>Sampla<a class=\"heading-anchor\" href=\"#an-example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"admonition-example-purposes-only admonition\" role=\"note\">\n<p class=\"admonition-title\">Cuspóirí samplacha amháin!</p>\n<p>Tá an sampla seo beartaithe mar léiriú ar an gcaoi is féidir bonneagar an ródaire a úsáid chun úsáid bunachar sonraí a athrú. Déanann sé neamhaird de ghnó roinnt saincheisteanna casta d'fhonn a léiriú conas a úsáidtear ródair</p>\n<p>Ní oibreoidh an sampla seo má tá caidreamh le samhlacha lasmuigh den bhunachar sonraí <code class=\"docutils literal notranslate\">`eile ``ag aon cheann de na samhlacha i `myapp</code>. :ref: Tugann <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>caidrimh tras-bhunachar sonraí &lt;no_cross_database_relations&gt;`fadhbanna sláine tagartha isteach nach féidir le Django a láimhseáil faoi láthair.</p>\n<p>Tá an chumraíocht bunús/macasamhail (dá ngairtear máistir/sclábhaí ag roinnt bunachair sonraí) a thuairiscítear lochtach freisin - ní sholáthraíonn sé aon réiteach chun moill macasamhail a láimhseáil (ie, neamhréireachtaí fiosrúcháin a tugadh isteach mar gheall ar an am a thógtar le scríobh chun iomadú chuig na macasamhail). Ní mheasann sé freisin idirghníomhaíocht idirbhearta leis an straitéis úsáide bunachar sonraí.</p>\n</aside>\n<p>Mar sin - cad a chiallaíonn sé seo i gcleachtas? Déanaimis smaoineamh ar chumraíocht samplach eile. Beidh roinnt bunachar sonraí ag an gceann seo: ceann don fheidhmchlár <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>auth`, agus gach aip eile ag baint úsáide as socrú bunscoil/macasamhail le dhá mhacasamhail léite. Seo na socruithe a shonraíonn na bunachair sonraí seo:</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>DATABASES <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span> <span class=\"p\">{},</span>\n    <span class=\"s2\">&quot;auth_db&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;auth_db_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.db.backends.mysql&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;USER&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;mysql_user&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;PASSWORD&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;swordfish&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n    <span class=\"s2\">&quot;primary&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;primary_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.db.backends.mysql&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;USER&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;mysql_user&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;PASSWORD&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;spam&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n    <span class=\"s2\">&quot;replica1&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;replica1_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.db.backends.mysql&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;USER&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;mysql_user&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;PASSWORD&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;eggs&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n    <span class=\"s2\">&quot;replica2&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;replica2_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.db.backends.mysql&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;USER&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;mysql_user&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;PASSWORD&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;bacon&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>Anois beidh orainn ródú a láimhseáil. Ar dtús ba mhaith linn ródaire a bhfuil a fhios aige ceisteanna a sheoladh do na feidhmchláir auth` agus contenttypes` chuig auth_db` (tá samhlacha auth` nasctha le contentType`, mar sin caithfear iad a stóráil sa bhunachar sonraí céanna):</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=\"nc\">AuthRouter</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A router to control all database operations on models in the</span>\n<span class=\"sd\">    auth and contenttypes applications.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    route_app_labels <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;auth&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;contenttypes&quot;</span><span class=\"p\">}</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">db_for_read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> model<span class=\"p\">,</span> <span class=\"o\">**</span>hints<span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Attempts to read auth and contenttypes models go to auth_db.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> model<span class=\"o\">.</span>_meta<span class=\"o\">.</span>app_label <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span>route_app_labels<span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s2\">&quot;auth_db&quot;</span>\n        <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">db_for_write</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> model<span class=\"p\">,</span> <span class=\"o\">**</span>hints<span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Attempts to write auth and contenttypes models go to auth_db.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> model<span class=\"o\">.</span>_meta<span class=\"o\">.</span>app_label <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span>route_app_labels<span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s2\">&quot;auth_db&quot;</span>\n        <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">allow_relation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> obj1<span class=\"p\">,</span> obj2<span class=\"p\">,</span> <span class=\"o\">**</span>hints<span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Allow relations if a model in the auth or contenttypes apps is</span>\n<span class=\"sd\">        involved.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"p\">(</span>\n            obj1<span class=\"o\">.</span>_meta<span class=\"o\">.</span>app_label <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span>route_app_labels\n            <span class=\"ow\">or</span> obj2<span class=\"o\">.</span>_meta<span class=\"o\">.</span>app_label <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span>route_app_labels\n        <span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"kc\">True</span>\n        <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">allow_migrate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> db<span class=\"p\">,</span> app_label<span class=\"p\">,</span> model_name<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"o\">**</span>hints<span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Make sure the auth and contenttypes apps only appear in the</span>\n<span class=\"sd\">        &#39;auth_db&#39; database.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> app_label <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span>route_app_labels<span class=\"p\">:</span>\n            <span class=\"k\">return</span> db <span class=\"o\">==</span> <span class=\"s2\">&quot;auth_db&quot;</span>\n        <span class=\"k\">return</span> <span class=\"kc\">None</span>\n</code></pre></div>\n<p>Agus theastaíonn ródaire uainn freisin a sheolann gach aip eile chuig an gcumraíocht bunscoil/macasamhail, agus a roghnaíonn macasamhail go randamach le léamh as:</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\">random</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PrimaryReplicaRouter</span><span class=\"p\">:</span>\n    <span class=\"k\">def</span> <span class=\"nf\">db_for_read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> model<span class=\"p\">,</span> <span class=\"o\">**</span>hints<span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Reads go to a randomly-chosen replica.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> random<span class=\"o\">.</span>choice<span class=\"p\">([</span><span class=\"s2\">&quot;replica1&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;replica2&quot;</span><span class=\"p\">])</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">db_for_write</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> model<span class=\"p\">,</span> <span class=\"o\">**</span>hints<span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Writes always go to primary.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;primary&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">allow_relation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> obj1<span class=\"p\">,</span> obj2<span class=\"p\">,</span> <span class=\"o\">**</span>hints<span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Relations between objects are allowed if both objects are</span>\n<span class=\"sd\">        in the primary/replica pool.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        db_set <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;primary&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;replica1&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;replica2&quot;</span><span class=\"p\">}</span>\n        <span class=\"k\">if</span> obj1<span class=\"o\">.</span>_state<span class=\"o\">.</span>db <span class=\"ow\">in</span> db_set <span class=\"ow\">and</span> obj2<span class=\"o\">.</span>_state<span class=\"o\">.</span>db <span class=\"ow\">in</span> db_set<span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">True</span>\n        <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">allow_migrate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> db<span class=\"p\">,</span> app_label<span class=\"p\">,</span> model_name<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"o\">**</span>hints<span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        All non-auth models end up in this pool.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"kc\">True</span>\n</code></pre></div>\n<p>Faoi dheireadh, sa chomhad socruithe, cuirimid an méid seo a leanas leis (ag cur path.to.` in ionad an cosán Python iarbhír chuig an modúl (í) ina bhfuil na ródairí sainmhínithe):</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>DATABASE_ROUTERS <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;path.to.AuthRouter&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;path.to.PrimaryReplicaRouter&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Tá an t-ord ina ndéantar ródairí a phróiseáil suntasach. Cuirfear ceist ar ródairí san ord atá siad liostaithe sa socrú: SETTING: DATABASE_ROUTERS. Sa sampla seo, déantar an Authrough ``a phróiseáil roimh an ``PrimaryRepliCarouter`, agus mar thoradh air sin, déantar cinntí a bhaineann leis na samhlacha in auth a phróiseáil sula ndéantar aon chinneadh eile. Má liostaíodh an socrú:setting: DATABASE_ROUTERS an dá ródaire san ord eile, bheadh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>primaryReplicaRouter.ALLOW_MIGRATE () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a phróiseáil ar dtús. Ciallaíonn nádúr uile an chur i bhfeidhm PrimaryReplicaOuter go mbeadh na samhlacha go léir ar fáil ar gach bunachar sonraí.</p>\n<p>With this setup installed, and all databases migrated as per\n<a class=\"reference internal\" href=\"#synchronizing-multiple-databases\"><span class=\"std std-ref\">Sioncrónú do bhunachar sonraí</span></a>, let's run some Django 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=\"c1\"># This retrieval will be performed on the &#39;auth_db&#39; database</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>fred <span class=\"o\">=</span> User<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>username<span class=\"o\">=</span><span class=\"s2\">&quot;fred&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>fred<span class=\"o\">.</span>first_name <span class=\"o\">=</span> <span class=\"s2\">&quot;Frederick&quot;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># This save will also be directed to &#39;auth_db&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>fred<span class=\"o\">.</span>save<span class=\"p\">()</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># These retrieval will be randomly allocated to a replica database</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>dna <span class=\"o\">=</span> Person<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Douglas Adams&quot;</span><span class=\"p\">)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># A new object has no database allocation when created</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>mh <span class=\"o\">=</span> Book<span class=\"p\">(</span>title<span class=\"o\">=</span><span class=\"s2\">&quot;Mostly Harmless&quot;</span><span class=\"p\">)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># This assignment will consult the router, and set mh onto</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># the same database as the author object</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>mh<span class=\"o\">.</span>author <span class=\"o\">=</span> dna\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># This save will force the &#39;mh&#39; instance onto the primary database...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>mh<span class=\"o\">.</span>save<span class=\"p\">()</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># ... but if we re-retrieve the object, it will come back on a replica</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>mh <span class=\"o\">=</span> Book<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>title<span class=\"o\">=</span><span class=\"s2\">&quot;Mostly Harmless&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Sainmhínigh an sampla seo ródaire chun idirghníomhaíocht a láimhseáil le samhlacha ón aip auth, agus ródairí eile chun idirghníomhú le gach aip eile a láimhseáil. Má d'fhág tú do bhunachar sonraí <code class=\"docutils literal notranslate\">default</code> folamh agus mura dteastaíonn uait ródaire bunachar sonraí catch-all a shainiú chun gach aip nach sonraítear ar mhalairt a láimhseáil, ní mór do ródairí ainmneacha gach aip a láimhseáil in:setting: INSTALLED_APPS sula ndéanann tú imirce. Féach:ref: contrib_app_multiple_databases le haghaidh faisnéise faoi apps contrib nach mór a bheith le chéile i mbunachar sonraí amháin.</p>\n</section>\n</section>\n<section id=\"manually-selecting-a-database\">\n<h2>Bunachar sonraí a roghnú de láimh<a class=\"heading-anchor\" href=\"#manually-selecting-a-database\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Soláthraíonn Django API freisin a ligeann duit smacht iomlán a choinneáil ar úsáid bunachar sonraí i do chód. Glacfaidh leithdháileadh bunachar sonraí sonraithe de láimh tosaíocht ar bhunachar sonraí a leithdháiltear</p>\n<section id=\"manually-selecting-a-database-for-a-queryset\">\n<h3>Bunachar sonraí a roghnú de láimh le haghaidh <code class=\"docutils literal notranslate\">QuerySet</code><a class=\"heading-anchor\" href=\"#manually-selecting-a-database-for-a-queryset\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Is féidir leat an bunachar sonraí do QuerySet` a roghnú ag pointe ar bith sa slabhra <code class=\"docutils literal notranslate\">QuerySet</code>. Glaoigh ar <code class=\"docutils literal notranslate\">using () ``ar an `QuerySet</code> chun <code class=\"docutils literal notranslate\">QuerySet</code> eile a fháil a úsáideann an bunachar sonraí sonraithe.</p>\n<p>Tógann <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>using () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>argóint amháin: ainm an bhunachar sonraí ar mhaith leat an cheist a reáchtáil. 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=\"c1\"># This will run on the &#39;default&#39; database.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># So will this.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>using<span class=\"p\">(</span><span class=\"s2\">&quot;default&quot;</span><span class=\"p\">)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># This will run on the &#39;other&#39; database.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>using<span class=\"p\">(</span><span class=\"s2\">&quot;other&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"selecting-a-database-for-save\">\n<h3>Bunachar sonraí a roghnú le haghaidh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>save () ``<a class=\"heading-anchor\" href=\"#selecting-a-database-for-save\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Úsáid an eochairfhocal <code class=\"docutils literal notranslate\">using</code> le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Model.save () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>chun a shonrú ar cén bunachar sonraí ba chóir na sonraí a shábháil.</p>\n<p>Mar shampla, chun réad a shábháil chuig an mbunachar sonraí legacy_users, d'úsáideann tú seo:</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>my_object<span class=\"o\">.</span>save<span class=\"p\">(</span>using<span class=\"o\">=</span><span class=\"s2\">&quot;legacy_users&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Mura sonraíonn tú <code class=\"docutils literal notranslate\">úsáid ``, sábhálfaidh an modh ``save ()</code> isteach sa bhunachar sonraí réamhshocraithe arna leithdháileadh ag na ródairí.</p>\n<section id=\"moving-an-object-from-one-database-to-another\">\n<h4>Ag bogadh réad ó bhunachar sonraí amháin go ceann eile<a class=\"heading-anchor\" href=\"#moving-an-object-from-one-database-to-another\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Má shábháil tú sampla chuig bunachar sonraí amháin, b'fhéidir go mbeadh sé mealltach <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>save (using =...) <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a úsáid mar bhealach chun an sampla a aistriú chuig bunachar sonraí nua. Mar sin féin, mura nglacann tú céimeanna iomchuí, d'fhéadfadh roinnt iarmhairtí gan choinne a bheith aige seo.</p>\n<p>Smaoinigh ar an sampla seo a leanas:</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>p <span class=\"o\">=</span> Person<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Fred&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>save<span class=\"p\">(</span>using<span class=\"o\">=</span><span class=\"s2\">&quot;first&quot;</span><span class=\"p\">)</span>  <span class=\"c1\"># (statement 1)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>save<span class=\"p\">(</span>using<span class=\"o\">=</span><span class=\"s2\">&quot;second&quot;</span><span class=\"p\">)</span>  <span class=\"c1\"># (statement 2)</span>\n</code></pre></div>\n<p>I ráiteas 1, sábhálfar réad nua <code class=\"docutils literal notranslate\">`Person</code> chuig an mbunachar sonraí <code class=\"docutils literal notranslate\">chéad</code>. Ag an am seo, níl eochair phríomhúil ag p`, mar sin eisíonn Django ráiteas <code class=\"docutils literal notranslate\">INSERT</code> SQL. Cruthaíonn sé seo eochair phríomhúil, agus sannann Django an príomh-eochair sin do p`.</p>\n<p>Nuair a tharlaíonn an sábháil i ráiteas 2, tá príomhluach ag p` cheana féin, agus déanfaidh Django iarracht an eochair phríomhúil sin a úsáid ar an mbunachar sonraí nua. Mura bhfuil an príomhluach in úsáid sa bhunachar sonraí <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>dara <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>, ansin ní bheidh aon fhadhbanna agat - cóipeálfar an réad chuig an mbunachar sonraí nua.</p>\n<p>Mar sin féin, má tá príomh-eochair p` in úsáid cheana féin ar an mbunachar sonraí <code class=\"docutils literal notranslate\">dara ``, cuirfear an réad atá ann cheana sa bhunachar sonraí ``soicin` nuair a shábháiltear `p</code>.</p>\n<p>Is féidir leat é seo a sheachaint ar dhá bhealach. Ar dtús, is féidir leat eochair phríomhúil an cháis a ghlanadh. Mura bhfuil aon phríomh-eochair ag réad, déileálfaidh Django leis mar réad nua, ag seachaint aon chaillteanas sonraí ar an mbunachar sonraí <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>dara <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>:</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>p <span class=\"o\">=</span> Person<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Fred&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>save<span class=\"p\">(</span>using<span class=\"o\">=</span><span class=\"s2\">&quot;first&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>pk <span class=\"o\">=</span> <span class=\"kc\">None</span>  <span class=\"c1\"># Clear the primary key.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>save<span class=\"p\">(</span>using<span class=\"o\">=</span><span class=\"s2\">&quot;second&quot;</span><span class=\"p\">)</span>  <span class=\"c1\"># Write a completely new object.</span>\n</code></pre></div>\n<p>Is é an dara rogha ná an rogha <code class=\"docutils literal notranslate\">force_insert</code> a úsáid chun <code class=\"docutils literal notranslate\">save () ``chun a chinntiú go ndéanann Django SQL ``INSERT</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>p <span class=\"o\">=</span> Person<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Fred&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>save<span class=\"p\">(</span>using<span class=\"o\">=</span><span class=\"s2\">&quot;first&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>save<span class=\"p\">(</span>using<span class=\"o\">=</span><span class=\"s2\">&quot;second&quot;</span><span class=\"p\">,</span> force_insert<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Cinnteoidh sé seo go mbeidh an príomh-eochair chéanna ag an duine darb ainm <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Fred` ar an dá bhunachar sonraí. Má tá an príomh-eochair sin in úsáid cheana féin nuair a dhéanann tú iarracht sábháil ar an mbunachar sonraí <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>dara <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>, ardófar earráid.</p>\n</section>\n</section>\n<section id=\"selecting-a-database-to-delete-from\">\n<h3>Bunachar sonraí a roghnú le scriosadh as<a class=\"heading-anchor\" href=\"#selecting-a-database-to-delete-from\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>De réir réamhshocraithe, cuirfear glao chun réad atá ann cheana a scriosadh ar an mbunachar sonraí céanna a úsáideadh chun an réad a aisghabháil sa chéad áit:</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>u <span class=\"o\">=</span> User<span class=\"o\">.</span>objects<span class=\"o\">.</span>using<span class=\"p\">(</span><span class=\"s2\">&quot;legacy_users&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span>get<span class=\"p\">(</span>username<span class=\"o\">=</span><span class=\"s2\">&quot;fred&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>u<span class=\"o\">.</span>delete<span class=\"p\">()</span>  <span class=\"c1\"># will delete from the `legacy_users` database</span>\n</code></pre></div>\n<p>Chun an bunachar sonraí as a scriosfar samhail a shonrú, cuir argóint eochairfhocal <code class=\"docutils literal notranslate\">úsáid ``chuig an modh ``Model.delete ()</code>. Oibríonn an argóint seo díreach cosúil leis an argóint eochairfhocal <code class=\"docutils literal notranslate\">`úsáid ``chun `save ()</code>.</p>\n<p>Mar shampla, má tá tú ag aistriú úsáideora ón mbunachar sonraí legacy_users chuig an mbunachar sonraí <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>new_users`, d'fhéadfá na horduithe seo a úsáid:</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>user_obj<span class=\"o\">.</span>save<span class=\"p\">(</span>using<span class=\"o\">=</span><span class=\"s2\">&quot;new_users&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>user_obj<span class=\"o\">.</span>delete<span class=\"p\">(</span>using<span class=\"o\">=</span><span class=\"s2\">&quot;legacy_users&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"using-managers-with-multiple-databases\">\n<h3>Bainisteoirí a úsáid le bunachair sonraí il<a class=\"heading-anchor\" href=\"#using-managers-with-multiple-databases\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Úsáid an modh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>db_manager () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>ar bhainisteoirí chun rochtain a thabhairt do bhainisteoirí ar bhunachar sonraí neamh-réamhshocraithe.</p>\n<p>Mar shampla, abair go bhfuil modh bainisteora saincheaptha agat a théann i dteagmháil leis an mbunachar sonraí - <code class=\"docutils literal notranslate\">User.Objects.create_user () ``. Toisc gur modh bainisteora é `create_user () ``, ní modh ``QuerySet</code>, ní féidir leat <code class=\"docutils literal notranslate\">User.Objects.using ('new_users') .create_user ()</code> a dhéanamh. (Níl an modh create_user () `ar fáil ach ar ``User.Objects`, an bainisteoir, ní ar rudaí <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>QuerySet` a dhíorthaítear ón mbainisteoir.) Is é an réiteach ná <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>db_manager () <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>a úsáid, mar seo:</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>User<span class=\"o\">.</span>objects<span class=\"o\">.</span>db_manager<span class=\"p\">(</span><span class=\"s2\">&quot;new_users&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span>create_user<span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Filleann <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>db_manager () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>cóip den bhainisteoir atá ceangailte leis an mbunachar sonraí a shonraíonn tú.</p>\n<section id=\"using-get-queryset-with-multiple-databases\">\n<h4>Ag baint úsáide as <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>get_queryset () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>le bunachair sonraí iolracha<a class=\"heading-anchor\" href=\"#using-get-queryset-with-multiple-databases\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Má tá tú ag cur <code class=\"docutils literal notranslate\">get_queryset () ``ar do bhainisteoir, déan cinnte glaoch ar an modh ar an tuismitheoir (ag baint úsáide as ``super ()</code>) nó déan láimhseáil chuí an tréith <code class=\"docutils literal notranslate\">_db</code> ar an mbainisteoir (sreang ina bhfuil ainm an bhunachar sonraí le húsáid).</p>\n<p>Mar shampla, más mian leat rang saincheaptha <code class=\"docutils literal notranslate\">QuerySet</code> a thabhairt ar ais ón modh <code class=\"docutils literal notranslate\">get_queryset</code>, d'fhéadfá seo a dhéanamh:</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=\"nc\">MyManager</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Manager<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        qs <span class=\"o\">=</span> CustomQuerySet<span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>model<span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span>_db <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            qs <span class=\"o\">=</span> qs<span class=\"o\">.</span>using<span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>_db<span class=\"p\">)</span>\n        <span class=\"k\">return</span> qs\n</code></pre></div>\n</section>\n</section>\n</section>\n<section id=\"exposing-multiple-databases-in-django-s-admin-interface\">\n<h2>Bunachair sonraí iolracha a nochtadh i gcomhéadan riaracháin D<a class=\"heading-anchor\" href=\"#exposing-multiple-databases-in-django-s-admin-interface\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Níl aon tacaíocht shoiléir ag riarachán Django do iliomad bunachair sonraí. Más mian leat comhéadan riaracháin a sholáthar do mhúnla ar bhunachar sonraí seachas an ceann a shonraíonn do slabhra ródaire, beidh ort ranganna saincheap:class: ~django.contrib.admin.modelAdmin a scríobh a threoróidh an riarachán bunachar sonraí sonrach a úsáid le haghaidh ábhar.</p>\n<p>Tá na modhanna seo a leanas ag rudaí ModelAdmin a éilíonn saincheaptha le haghaidh tacaíochta ilbhunachar sonraí:</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=\"nc\">MultiDBModelAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"c1\"># A handy constant for the name of the alternate database.</span>\n    using <span class=\"o\">=</span> <span class=\"s2\">&quot;other&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save_model</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> obj<span class=\"p\">,</span> form<span class=\"p\">,</span> change<span class=\"p\">):</span>\n        <span class=\"c1\"># Tell Django to save objects to the &#39;other&#39; database.</span>\n        obj<span class=\"o\">.</span>save<span class=\"p\">(</span>using<span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span>using<span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">delete_model</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> obj<span class=\"p\">):</span>\n        <span class=\"c1\"># Tell Django to delete objects from the &#39;other&#39; database</span>\n        obj<span class=\"o\">.</span>delete<span class=\"p\">(</span>using<span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span>using<span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">):</span>\n        <span class=\"c1\"># Tell Django to look for objects on the &#39;other&#39; database.</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>get_queryset<span class=\"p\">(</span>request<span class=\"p\">)</span><span class=\"o\">.</span>using<span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>using<span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">formfield_for_foreignkey</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> db_field<span class=\"p\">,</span> request<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        <span class=\"c1\"># Tell Django to populate ForeignKey widgets using a query</span>\n        <span class=\"c1\"># on the &#39;other&#39; database.</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>formfield_for_foreignkey<span class=\"p\">(</span>\n            db_field<span class=\"p\">,</span> request<span class=\"p\">,</span> using<span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span>using<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">formfield_for_manytomany</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> db_field<span class=\"p\">,</span> request<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        <span class=\"c1\"># Tell Django to populate ManyToMany widgets using a query</span>\n        <span class=\"c1\"># on the &#39;other&#39; database.</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>formfield_for_manytomany<span class=\"p\">(</span>\n            db_field<span class=\"p\">,</span> request<span class=\"p\">,</span> using<span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span>using<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs\n        <span class=\"p\">)</span>\n</code></pre></div>\n<p>Cuireann an cur i bhfeidhm a chuirtear ar fáil anseo straitéis ilbhunachar sonraí i bhfeidhm ina ndéantar gach rud de chineál ar leith a stóráil ar bhunachar sonraí ar leith (m.sh., tá gach rud <code class=\"docutils literal notranslate\">Úsáideora ``sa bhunachar sonraí ``eile</code>). Má tá do úsáid a bhaineann le bunachair sonraí iolracha níos casta, beidh ar do ModelAdmin` an straitéis sin a léiriú.</p>\n<p><a class=\"reference internal\" href=\"/ga/6.1/ref/contrib/admin/#django.contrib.admin.InlineModelAdmin\" title=\"django.contrib.admin.InlineModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">InlineModelAdmin</code></a> objects can be handled in a\nsimilar fashion. They require three customized methods:</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=\"nc\">MultiDBTabularInline</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>TabularInline<span class=\"p\">):</span>\n    using <span class=\"o\">=</span> <span class=\"s2\">&quot;other&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">):</span>\n        <span class=\"c1\"># Tell Django to look for inline objects on the &#39;other&#39; database.</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>get_queryset<span class=\"p\">(</span>request<span class=\"p\">)</span><span class=\"o\">.</span>using<span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>using<span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">formfield_for_foreignkey</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> db_field<span class=\"p\">,</span> request<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        <span class=\"c1\"># Tell Django to populate ForeignKey widgets using a query</span>\n        <span class=\"c1\"># on the &#39;other&#39; database.</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>formfield_for_foreignkey<span class=\"p\">(</span>\n            db_field<span class=\"p\">,</span> request<span class=\"p\">,</span> using<span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span>using<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">formfield_for_manytomany</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> db_field<span class=\"p\">,</span> request<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        <span class=\"c1\"># Tell Django to populate ManyToMany widgets using a query</span>\n        <span class=\"c1\"># on the &#39;other&#39; database.</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>formfield_for_manytomany<span class=\"p\">(</span>\n            db_field<span class=\"p\">,</span> request<span class=\"p\">,</span> using<span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span>using<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs\n        <span class=\"p\">)</span>\n</code></pre></div>\n<p>Nuair a bheidh do shainmhínithe riaracháin samhail scríofa agat, is féidir iad a chlárú le haon shampla <code class=\"docutils literal notranslate\">Riarachán</code>:</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.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">myapp.models</span> <span class=\"kn\">import</span> Author<span class=\"p\">,</span> Book<span class=\"p\">,</span> Publisher\n\n<span class=\"c1\"># Import our custom ModelAdmin and TabularInline from where they&#39;re defined.</span>\n<span class=\"kn\">from</span> <span class=\"nn\">myproject.admin</span> <span class=\"kn\">import</span> MultiDBModelAdmin<span class=\"p\">,</span> MultiDBTabularInline\n\n\n<span class=\"c1\"># Specialize the multi-db admin objects for use with specific models.</span>\n<span class=\"k\">class</span> <span class=\"nc\">BookInline</span><span class=\"p\">(</span>MultiDBTabularInline<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> Book\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PublisherAdmin</span><span class=\"p\">(</span>MultiDBModelAdmin<span class=\"p\">):</span>\n    inlines <span class=\"o\">=</span> <span class=\"p\">[</span>BookInline<span class=\"p\">]</span>\n\n\nadmin<span class=\"o\">.</span>site<span class=\"o\">.</span>register<span class=\"p\">(</span>Author<span class=\"p\">,</span> MultiDBModelAdmin<span class=\"p\">)</span>\nadmin<span class=\"o\">.</span>site<span class=\"o\">.</span>register<span class=\"p\">(</span>Publisher<span class=\"p\">,</span> PublisherAdmin<span class=\"p\">)</span>\n\nothersite <span class=\"o\">=</span> admin<span class=\"o\">.</span>AdminSite<span class=\"p\">(</span><span class=\"s2\">&quot;othersite&quot;</span><span class=\"p\">)</span>\nothersite<span class=\"o\">.</span>register<span class=\"p\">(</span>Publisher<span class=\"p\">,</span> MultiDBModelAdmin<span class=\"p\">)</span>\n</code></pre></div>\n<p>Bunaíonn an sampla seo dhá shuíomh riaracháin. Ar an gcéad láithreán, nochtar na rudaí <code class=\"docutils literal notranslate\">Údar</code> agus Foilsitheoir`; tá inlíne táblaí ag rudaí <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Foilsitheora <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a thaispeánann leabhair arna fhoilsiú ag an bhfoilsitheoir sin. Nochtann an dara suíomh ach foilsitheoirí, gan na línte.</p>\n</section>\n<section id=\"using-raw-cursors-with-multiple-databases\">\n<h2>Cúrsaí amh a úsáid le bunachair sonraí iolracha<a class=\"heading-anchor\" href=\"#using-raw-cursors-with-multiple-databases\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Má tá níos mó ná bunachar sonraí amháin á úsáid agat is féidir leat <code class=\"docutils literal notranslate\">django.db.connections</code> 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\">django.db.connections</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=\"nn\">django.db</span> <span class=\"kn\">import</span> connections\n\n<span class=\"k\">with</span> connections<span class=\"p\">[</span><span class=\"s2\">&quot;my_db_alias&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span>cursor<span class=\"p\">()</span> <span class=\"k\">as</span> cursor<span class=\"p\">:</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n</section>\n<section id=\"limitations-of-multiple-databases\">\n<h2>Teorainneacha ar bhunachar sonraí<a class=\"heading-anchor\" href=\"#limitations-of-multiple-databases\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"cross-database-relations\">\n<span id=\"no-cross-database-relations\"></span><h3>Caidreamh trasbhunachar sonraí<a class=\"heading-anchor\" href=\"#cross-database-relations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Faoi láthair ní sholáthraíonn Django aon tacaíocht d'eochair eachtracha nó caidrimh go leor a chuimsíonn bunachair sonraí iolracha. Má d'úsáid tú ródaire chun samhlacha a dheighilt chuig bunachair sonraí éagsúla, caithfidh aon eochair eachtrach agus caidrimh go leor a shainmhíníonn na samhlacha sin a bheith inmheánach le bunachar sonraí amháin.</p>\n<p>Tá sé seo mar gheall ar shláine tagartha. D'fhonn caidreamh idir dhá réad a choinneáil, ní mór go mbeadh a fhios ag Django go bhfuil príomh-eochair an réada gaolmhara bailí. Má stóráiltear an príomh-eochair ar bhunachar sonraí ar leithligh, ní féidir bailíocht eochair phríomhúil a mheas go héasca.</p>\n<p>Má tá Postgres, SQLite, Oracle, nó MySQL á úsáid agat le InnoDB, cuirtear é seo i bhfeidhm ag leibhéal sláine an bhunachar sonraí - cosc ar phríomhshrianta ar leibhéal bunachar sonraí caidrimh nach féidir a bhailíochtú a chruthú.</p>\n<p>Mar sin féin, má tá MySQL á úsáid agat le táblaí MyISAM, níl aon sláine tagartha forfheidhmithe ann; mar thoradh air sin, b'fhéidir go mbeidh tú in ann eochracha eachtracha trasbhunachar sonraí 'bréige' a dhéanamh. Mar sin féin, ní thacaíonn Django leis an gcumraíocht seo go hoifigiúil.</p>\n</section>\n<section id=\"behavior-of-contrib-apps\">\n<span id=\"contrib-app-multiple-databases\"></span><h3>Iompar aipeanna contrib<a class=\"heading-anchor\" href=\"#behavior-of-contrib-apps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Cuimsíonn roinnt aipeanna contrib samhlacha, agus braitheann roinnt aipeanna ar dhaoine eile. Ós rud é go bhfuil caidrimh tras-bhunachar sonraí dodhéanta, cruthaíonn sé seo roinnt srianta ar an gcaoi ar féidir leat na samhlacha seo</p>\n<ul class=\"simple\">\n<li><p>is féidir gach ceann de ContentTypes.ContentType`, Sessions.Session` agus <code class=\"docutils literal notranslate\">Sites.Site</code> a stóráil in aon bhunachar sonraí, mar gheall ar ródaire oiriúnach.</p></li>\n<li><p>Tá samhlacha <code class=\"docutils literal notranslate\">auth</code> - <code class=\"docutils literal notranslate\">Úsáideor</code>, Grúpa` agus <code class=\"docutils literal notranslate\">Cead</code> - nasctha le chéile agus nasctha le <code class=\"docutils literal notranslate\">ContentType</code>, mar sin ní mór iad a stóráil sa bhunachar sonraí céanna le ContentType`.</p></li>\n<li><p>Braitheann <code class=\"docutils literal notranslate\">admin ``ar `auth</code>, mar sin caithfidh a mhúnlaí a bheith sa bhunachar sonraí céanna le <code class=\"docutils literal notranslate\">auth</code>.</p></li>\n<li><p>Braitheann <code class=\"docutils literal notranslate\">flatpages</code> agus <code class=\"docutils literal notranslate\">atreoruithe ``ar `suíomhanna</code>, mar sin caithfidh a gcuid samhlacha a bheith sa bhunachar sonraí céanna le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>suíomhanna <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p></li>\n</ul>\n<p>Ina theannta sin, cruthaítear roinnt rudaí go huathoibríoch díreach tar éis: cruthaíonn migrate tábla chun iad a choinneáil i mbunachar sonraí:</p>\n<ul class=\"simple\">\n<li><p>réamhshocraithe <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Suíomh <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>,</p></li>\n<li><p>“cineál ábhair” do gach samhail (lena n-áirítear iad siúd nach stóráiltear sa bhunachar sonraí sin),</p></li>\n<li><p>na Ceadúna` do gach samhail (lena n-áirítear iad siúd nach stóráiltear sa bhunachar sonraí sin).</p></li>\n</ul>\n<p>Maidir le socruithe coitianta le bunachair sonraí iolracha, níl sé úsáideach na rudaí seo a bheith i níos mó ná bunachar sonraí amháin. I measc na socruithe coitianta tá bunúsche/macasamhail agus nascadh le bunachair sonraí Dá bhrí sin, moltar a scríobh a:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>ródaire bunachar sonraí &lt;topics-db-multi-db-routing&gt;`a cheadaíonn na trí mhúnla seo a shioncrónú le bunachar sonraí amháin. Úsáid an cur chuige céanna le haghaidh aipeanna contrib agus tríú páirtí nach dteastaíonn a dtáblaí uathu i iliomad bunachar</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>Má tá cineálacha ábhair á shioncronú agat le níos mó ná bunachar sonraí amháin, bí ar an eolas go bhféadfadh nach n-oireann a bpríomh-eochracha trasna bunachair sonraí D'fhéadfadh éilliú sonraí nó caillteanas sonraí mar thoradh air seo.</p>\n</aside>\n</section>\n</section>","rootId":"multiple-databases","toc":[{"title":"Sainmhíniú do bhunachar","anchor":"defining-your-databases","children":[]},{"title":"Sioncrónú do bhunachar sonraí","anchor":"synchronizing-your-databases","children":[{"title":"Orduithe bainistíochta eile a úsáid","anchor":"using-other-management-commands","children":[]}]},{"title":"Ródú uathoibríoch bunachar","anchor":"automatic-database-routing","children":[{"title":"Ródaithe bunachar sonraí","anchor":"database-routers","children":[{"title":"Leideanna","anchor":"hints","children":[]}]},{"title":"Úsáid ródairí","anchor":"using-routers","children":[]},{"title":"Sampla","anchor":"an-example","children":[]}]},{"title":"Bunachar sonraí a roghnú de láimh","anchor":"manually-selecting-a-database","children":[{"title":"Bunachar sonraí a roghnú de láimh le haghaidh QuerySet","anchor":"manually-selecting-a-database-for-a-queryset","children":[]},{"title":"Bunachar sonraí a roghnú le haghaidh ``save () ``","anchor":"selecting-a-database-for-save","children":[{"title":"Ag bogadh réad ó bhunachar sonraí amháin go ceann eile","anchor":"moving-an-object-from-one-database-to-another","children":[]}]},{"title":"Bunachar sonraí a roghnú le scriosadh as","anchor":"selecting-a-database-to-delete-from","children":[]},{"title":"Bainisteoirí a úsáid le bunachair sonraí il","anchor":"using-managers-with-multiple-databases","children":[{"title":"Ag baint úsáide as ``get_queryset () ``le bunachair sonraí iolracha","anchor":"using-get-queryset-with-multiple-databases","children":[]}]}]},{"title":"Bunachair sonraí iolracha a nochtadh i gcomhéadan riaracháin D","anchor":"exposing-multiple-databases-in-django-s-admin-interface","children":[]},{"title":"Cúrsaí amh a úsáid le bunachair sonraí iolracha","anchor":"using-raw-cursors-with-multiple-databases","children":[]},{"title":"Teorainneacha ar bhunachar sonraí","anchor":"limitations-of-multiple-databases","children":[{"title":"Caidreamh trasbhunachar sonraí","anchor":"cross-database-relations","children":[]},{"title":"Iompar aipeanna contrib","anchor":"behavior-of-contrib-apps","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/transactions","title":"Idirbheart bunachar sonraí","url":"/ga/6.1/topics/db/transactions/"},"next":{"docname":"topics/db/tablespaces","title":"Spásanna tábla","url":"/ga/6.1/topics/db/tablespaces/"},"formats":{"html":"/ga/6.1/topics/db/multi-db/","markdown":"/ga/6.1/topics/db/multi-db.md","json":"/ga/6.1/topics/db/multi-db.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/topics/db/multi-db.txt","official":"https://docs.djangoproject.com/ga/6.1/topics/db/multi-db/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}