{"title":"Flera databaser","version":"6.0","locale":"sv","docname":"topics/db/multi-db","url":"/sv/6.0/topics/db/multi-db/","canonical":"https://djangodocs.dev/sv/6.0/topics/db/multi-db/","summary":"Denna ämnesguide beskriver Djangos stöd för att interagera med flera databaser. Det mesta av resten av Djangos dokumentation förutsätter att du interagerar med en…","html":"<h1>Flera databaser<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>Denna ämnesguide beskriver Djangos stöd för att interagera med flera databaser. Det mesta av resten av Djangos dokumentation förutsätter att du interagerar med en enda databas. Om du vill interagera med flera databaser måste du vidta några ytterligare åtgärder.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Se även</p>\n<p>Se <a class=\"reference internal\" href=\"/sv/6.0/topics/testing/tools/#testing-multi-db\"><span class=\"std std-ref\">Stöd för flera databaser</span></a> för information om testning med flera databaser.</p>\n</aside>\n<section id=\"defining-your-databases\">\n<h2>Definiera dina databaser<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>Det första steget för att använda mer än en databas med Django är att berätta för Django om de databasservrar du kommer att använda. Detta görs med hjälp av inställningen <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASES</span></code></a>. Denna inställning mappar databasalias, som är ett sätt att hänvisa till en specifik databas i hela Django, till en ordbok med inställningar för den specifika anslutningen. Inställningarna i de inre ordböckerna beskrivs i sin helhet i <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASES</span></code></a>-dokumentationen.</p>\n<p>Databaser kan ha vilket alias du vill. Aliaset <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> har dock en speciell betydelse. Django använder databasen med aliaset <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> när ingen annan databas har valts.</p>\n<p>Följande är ett exempel på <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code> snutt som definierar två databaser - en standard PostgreSQL-databas och en MySQL-databas som heter <code class=\"docutils literal notranslate\"><span class=\"pre\">users</span></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=\"n\">DATABASES</span> <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>Om konceptet med en <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> databas inte är meningsfullt i samband med ditt projekt, måste du vara noga med att alltid ange den databas som du vill använda. Django kräver att en <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> databaspost definieras, men parameterordlistan kan lämnas tom om den inte kommer att användas. För att göra detta måste du ställa in <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-DATABASE_ROUTERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASE_ROUTERS</span></code></a> för alla dina appars modeller, inklusive de i alla contrib- och tredjepartsappar som du använder, så att inga frågor dirigeras till standarddatabasen. Följande är ett exempel på en <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code> snutt som definierar två icke-standarddatabaser, med <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> posten avsiktligt lämnad tom:</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\">DATABASES</span> <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>Om du försöker komma åt en databas som du inte har definierat i din <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASES</span></code></a>-inställning, kommer Django att göra ett <code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils.connection.ConnectionDoesNotExist</span></code> undantag.</p>\n</section>\n<section id=\"synchronizing-your-databases\">\n<span id=\"synchronizing-multiple-databases\"></span><h2>Synkronisering av dina databaser<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>Ledningskommandot <a class=\"reference internal\" href=\"/sv/6.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> arbetar med en databas i taget. Som standard används databasen <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code>, men genom att ange alternativet <a class=\"reference internal\" href=\"/sv/6.0/ref/django-admin/#cmdoption-migrate-database\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">--database</span></code></a> kan du be kommandot att synkronisera en annan databas. Så för att synkronisera alla modeller till alla databaser i det första exemplet ovan måste du anropa:</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>$<span class=\"w\"> </span>./manage.py<span class=\"w\"> </span>migrate\n$<span class=\"w\"> </span>./manage.py<span class=\"w\"> </span>migrate<span class=\"w\"> </span>--database<span class=\"o\">=</span>users\n</code></pre></div>\n<p>Om du inte vill att alla program ska synkroniseras med en viss databas kan du definiera en <a class=\"reference internal\" href=\"#topics-db-multi-db-routing\"><span class=\"std std-ref\">databasrouter</span></a> som implementerar en policy som begränsar tillgängligheten för vissa modeller.</p>\n<p>Om du, som i det andra exemplet ovan, har lämnat databasen <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> tom, måste du ange ett databasnamn varje gång du kör <a class=\"reference internal\" href=\"/sv/6.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a>. Om du utelämnar databasnamnet kommer du att få ett felmeddelande. För det andra exemplet:</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>$<span class=\"w\"> </span>./manage.py<span class=\"w\"> </span>migrate<span class=\"w\"> </span>--database<span class=\"o\">=</span>users\n$<span class=\"w\"> </span>./manage.py<span class=\"w\"> </span>migrate<span class=\"w\"> </span>--database<span class=\"o\">=</span>customers\n</code></pre></div>\n<section id=\"using-other-management-commands\">\n<h3>Använda andra hanteringskommandon<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>De flesta andra kommandon i <code class=\"docutils literal notranslate\"><span class=\"pre\">django-admin</span></code> som interagerar med databasen fungerar på samma sätt som <code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate`</span></code> - de fungerar bara på en databas i taget och använder <code class=\"docutils literal notranslate\"><span class=\"pre\">--database</span></code> för att styra vilken databas som används.</p>\n<p>Ett undantag från denna regel är kommandot <a class=\"reference internal\" href=\"/sv/6.0/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code></a>. Det validerar migreringshistoriken i databaserna för att upptäcka problem med de befintliga migreringsfilerna (som kan orsakas av att de redigerats) innan nya migreringar skapas. Som standard kontrolleras endast databasen <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code>, men metoden <code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">allow_migrate`()</span></code> i <a class=\"reference internal\" href=\"#topics-db-multi-db-routing\"><span class=\"std std-ref\">routers</span></a> konsulteras om någon sådan finns installerad.</p>\n</section>\n</section>\n<section id=\"automatic-database-routing\">\n<span id=\"topics-db-multi-db-routing\"></span><h2>Automatisk routning av databaser<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>Det enklaste sättet att använda flera databaser är att konfigurera ett routningsschema för databaser. Standarddirigeringsschemat säkerställer att objekt förblir ”klibbiga” till sin ursprungliga databas (dvs. ett objekt som hämtas från databasen <code class=\"docutils literal notranslate\"><span class=\"pre\">foo</span></code> kommer att sparas i samma databas). Standarddirigeringsschemat säkerställer att om en databas inte anges, går alla frågor tillbaka till <code class=\"docutils literal notranslate\"><span class=\"pre\">standard</span></code>-databasen.</p>\n<p>Du behöver inte göra någonting för att aktivera standardroutningsschemat - det tillhandahålls ”direkt” i alla Django-projekt. Men om du vill implementera mer intressanta beteenden för databasallokering kan du definiera och installera dina egna databasroutrar.</p>\n<section id=\"database-routers\">\n<h3>Databasroutrar<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>En databasrouter är en klass som tillhandahåller upp till fyra metoder:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"db_for_read\">\n<span class=\"sig-name descname\"><span class=\"pre\">db_for_read</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">hints</span></span></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>Föreslå den databas som bör användas för läsoperationer för objekt av typen <code class=\"docutils literal notranslate\"><span class=\"pre\">model</span></code>.</p>\n<p>Om en databasoperation kan tillhandahålla ytterligare information som kan hjälpa till att välja en databas, kommer den att tillhandahållas i ordlistan <code class=\"docutils literal notranslate\"><span class=\"pre\">hints</span></code>. Detaljer om giltiga hintar finns <a class=\"reference internal\" href=\"#topics-db-multi-db-hints\"><span class=\"std std-ref\">under</span></a>.</p>\n<p>Returnerar <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> om det inte finns något förslag.</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\"><span class=\"pre\">db_for_write</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">hints</span></span></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>Föreslå vilken databas som bör användas för skrivningar av objekt av typen Model.</p>\n<p>Om en databasoperation kan tillhandahålla ytterligare information som kan hjälpa till att välja en databas, kommer den att tillhandahållas i ordlistan <code class=\"docutils literal notranslate\"><span class=\"pre\">hints</span></code>. Detaljer om giltiga hintar finns <a class=\"reference internal\" href=\"#topics-db-multi-db-hints\"><span class=\"std std-ref\">under</span></a>.</p>\n<p>Returnerar <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> om det inte finns något förslag.</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\"><span class=\"pre\">allow_relation</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj1</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj2</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">hints</span></span></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>Returnerar <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> om en relation mellan <code class=\"docutils literal notranslate\"><span class=\"pre\">obj1</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">obj2</span></code> bör tillåtas, <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> om relationen bör förhindras, eller <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> om routern inte har någon åsikt. Detta är en ren valideringsoperation som används av foreign key och many to many-operationer för att avgöra om en relation ska tillåtas mellan två objekt.</p>\n<p>Om ingen router har en åsikt (d.v.s. alla routrar returnerar <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>), är endast relationer inom samma databas tillåtna.</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\"><span class=\"pre\">allow_migrate</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">db</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">app_label</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</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=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">hints</span></span></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>Avgör om migreringsoperationen får köras på databasen med aliaset <code class=\"docutils literal notranslate\"><span class=\"pre\">db</span></code>. Returnerar <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> om åtgärden ska köras, <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> om den inte ska köras, eller <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> om routern inte har någon åsikt.</p>\n<p>Det positionella argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">app_label</span></code> är etiketten för den applikation som migreras.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">model_name</span></code> sätts av de flesta migreringsoperationer till värdet av <code class=\"docutils literal notranslate\"><span class=\"pre\">model._meta.model_name</span></code> (den gemena versionen av modellens <code class=\"docutils literal notranslate\"><span class=\"pre\">__name__</span></code>) för den modell som migreras. Dess värde är <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> för operationerna <a class=\"reference internal\" href=\"/sv/6.0/ref/migration-operations/#django.db.migrations.operations.RunPython\" title=\"django.db.migrations.operations.RunPython\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RunPython</span></code></a> och <a class=\"reference internal\" href=\"/sv/6.0/ref/migration-operations/#django.db.migrations.operations.RunSQL\" title=\"django.db.migrations.operations.RunSQL\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RunSQL</span></code></a> om de inte tillhandahåller det med hjälp av tips.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">hints</span></code> används av vissa operationer för att kommunicera ytterligare information till routern.</p>\n<p>När <code class=\"docutils literal notranslate\"><span class=\"pre\">model_name</span></code> är inställt innehåller <code class=\"docutils literal notranslate\"><span class=\"pre\">hints</span></code> normalt modellklassen under nyckeln <code class=\"docutils literal notranslate\"><span class=\"pre\">'model'</span></code>. Observera att det kan vara en <a class=\"reference internal\" href=\"/sv/6.0/topics/migrations/#historical-models\"><span class=\"std std-ref\">historisk modell</span></a>, och därmed inte ha några anpassade attribut, metoder eller hanterare. Du bör bara förlita dig på <code class=\"docutils literal notranslate\"><span class=\"pre\">_meta</span></code>.</p>\n<p>Denna metod kan också användas för att avgöra om en modell finns tillgänglig i en viss databas.</p>\n<p><a class=\"reference internal\" href=\"/sv/6.0/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code></a> skapar alltid migreringar för modelländringar, men om <code class=\"docutils literal notranslate\"><span class=\"pre\">allow_migrate()</span></code> returnerar <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, kommer alla migreringsåtgärder för <code class=\"docutils literal notranslate\"><span class=\"pre\">model_name</span></code> att tyst hoppas över när du kör <a class=\"reference internal\" href=\"/sv/6.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> på <code class=\"docutils literal notranslate\"><span class=\"pre\">db</span></code>. Att ändra beteendet för <code class=\"docutils literal notranslate\"><span class=\"pre\">allow_migrate()</span></code> för modeller som redan har migreringar kan resultera i trasiga utländska nycklar, extra tabeller eller tabeller som saknas. När <a class=\"reference internal\" href=\"/sv/6.0/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code></a> verifierar migreringshistoriken hoppar den över databaser där ingen app tillåts migrera.</p>\n</dd></dl>\n\n<p>En router behöver inte tillhandahålla <em>alla</em> dessa metoder - den kan utelämna en eller flera av dem. Om en av metoderna utelämnas kommer Django att hoppa över den routern när den utför den relevanta kontrollen.</p>\n<section id=\"hints\">\n<span id=\"topics-db-multi-db-hints\"></span><h4>Tips<a class=\"heading-anchor\" href=\"#hints\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>De tips som databasroutern tar emot kan användas för att avgöra vilken databas som ska ta emot en viss förfrågan.</p>\n<p>At present, the only hint that will be provided is <code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></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\"><span class=\"pre\">instance</span></code> hint is present, the database from which it was fetched\nis recorded on its <a class=\"reference internal\" href=\"/sv/6.0/ref/models/instances/#django.db.models.Model._state\" title=\"django.db.models.Model._state\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">instance._state.db</span></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>Använda routrar<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>Databasroutrar installeras med hjälp av inställningen <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-DATABASE_ROUTERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASE_ROUTERS</span></code></a>. Den här inställningen definierar en lista med klassnamn som var och en anger en router som ska användas av basroutern (<code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.router</span></code>).</p>\n<p>Basroutern används av Djangos databasoperationer för att fördela databasanvändning. När en fråga behöver veta vilken databas som ska användas, anropar den basroutern och tillhandahåller en modell och en ledtråd (om tillgänglig). Basroutern provar varje routerklass i tur och ordning tills en av dem returnerar ett databasförslag. Om inga routrar returnerar ett förslag försöker basroutern med den aktuella <a class=\"reference internal\" href=\"/sv/6.0/ref/models/instances/#django.db.models.Model._state\" title=\"django.db.models.Model._state\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">instance._state.db</span></code></a> i hint-instansen. Om ingen hint-instans tillhandahölls, eller om <a class=\"reference internal\" href=\"/sv/6.0/ref/models/instances/#django.db.models.Model._state\" title=\"django.db.models.Model._state\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">instance._state.db</span></code></a> är <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>, kommer basroutern att allokera <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code>-databasen.</p>\n</section>\n<section id=\"an-example\">\n<h3>Ett exempel<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\">\n<p class=\"admonition-title\">Endast i exempelsyfte!</p>\n<p>Detta exempel är avsett som en demonstration av hur routerinfrastrukturen kan användas för att ändra databasanvändningen. Det bortser avsiktligt från vissa komplexa frågor för att visa hur routrar används.</p>\n<p>Det här exemplet fungerar inte om någon av modellerna i <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp</span></code> innehåller relationer till modeller utanför <code class=\"docutils literal notranslate\"><span class=\"pre\">andra</span></code> databasen. <a class=\"reference internal\" href=\"#no-cross-database-relations\"><span class=\"std std-ref\">Relationer mellan databaser</span></a> introducerar problem med referensintegritet som Django för närvarande inte kan hantera.</p>\n<p>Den beskrivna konfigurationen med primär/replik (som i vissa databaser kallas master/slave) är också bristfällig - den ger ingen lösning för att hantera replikationsfördröjning (dvs. inkonsekvenser i frågor som uppstår på grund av den tid det tar för en skrivning att spridas till replikerna). Den tar inte heller hänsyn till transaktionernas samspel med strategin för databasutnyttjande.</p>\n</aside>\n<p>Så - vad innebär detta i praktiken? Låt oss överväga en annan exempelkonfiguration. Den här kommer att ha flera databaser: en för <code class=\"docutils literal notranslate\"><span class=\"pre\">auth</span></code>-applikationen och alla andra appar som använder en primär / replika-installation med två läsrepliker. Här är inställningarna som specificerar dessa databaser:</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\">DATABASES</span> <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>Nu måste vi hantera routning. Först vill vi ha en router som vet att skicka frågor för apparna <code class=\"docutils literal notranslate\"><span class=\"pre\">auth</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">contenttypes</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">auth_db</span></code> (<code class=\"docutils literal notranslate\"><span class=\"pre\">auth</span></code> modeller är länkade till <code class=\"docutils literal notranslate\"><span class=\"pre\">ContentType</span></code>, så de måste lagras i samma databas):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthRouter</span><span class=\"p\">:</span>\n<span class=\"w\">    </span><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    <span class=\"n\">route_app_labels</span> <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=\"w\"> </span><span class=\"nf\">db_for_read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">hints</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><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> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">app_label</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">route_app_labels</span><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=\"w\"> </span><span class=\"nf\">db_for_write</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">hints</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><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> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">app_label</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">route_app_labels</span><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=\"w\"> </span><span class=\"nf\">allow_relation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj1</span><span class=\"p\">,</span> <span class=\"n\">obj2</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">hints</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><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            <span class=\"n\">obj1</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">app_label</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">route_app_labels</span>\n            <span class=\"ow\">or</span> <span class=\"n\">obj2</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">app_label</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">route_app_labels</span>\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=\"w\"> </span><span class=\"nf\">allow_migrate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">db</span><span class=\"p\">,</span> <span class=\"n\">app_label</span><span class=\"p\">,</span> <span class=\"n\">model_name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">hints</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><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> <span class=\"n\">app_label</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">route_app_labels</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">db</span> <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>Och vi vill också ha en router som skickar alla andra appar till konfigurationen primär/replika och slumpmässigt väljer en replika att läsa från:</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=\"w\"> </span><span class=\"nn\">random</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PrimaryReplicaRouter</span><span class=\"p\">:</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">db_for_read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">hints</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><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> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">choice</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\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">db_for_write</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">hints</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><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=\"w\"> </span><span class=\"nf\">allow_relation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj1</span><span class=\"p\">,</span> <span class=\"n\">obj2</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">hints</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><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        <span class=\"n\">db_set</span> <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> <span class=\"n\">obj1</span><span class=\"o\">.</span><span class=\"n\">_state</span><span class=\"o\">.</span><span class=\"n\">db</span> <span class=\"ow\">in</span> <span class=\"n\">db_set</span> <span class=\"ow\">and</span> <span class=\"n\">obj2</span><span class=\"o\">.</span><span class=\"n\">_state</span><span class=\"o\">.</span><span class=\"n\">db</span> <span class=\"ow\">in</span> <span class=\"n\">db_set</span><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=\"w\"> </span><span class=\"nf\">allow_migrate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">db</span><span class=\"p\">,</span> <span class=\"n\">app_label</span><span class=\"p\">,</span> <span class=\"n\">model_name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">hints</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><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>Slutligen lägger vi till följande i inställningsfilen (ersätter <code class=\"docutils literal notranslate\"><span class=\"pre\">path.to.</span></code> med den faktiska Python-sökvägen till den eller de moduler där routrarna definieras):</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\">DATABASE_ROUTERS</span> <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>Den ordning i vilken routrarna behandlas är viktig. Routrar kommer att efterfrågas i den ordning de listas i <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-DATABASE_ROUTERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASE_ROUTERS</span></code></a>. I det här exemplet bearbetas <code class=\"docutils literal notranslate\"><span class=\"pre\">AuthRouter</span></code> före <code class=\"docutils literal notranslate\"><span class=\"pre\">PrimaryReplicaRouter</span></code>, vilket innebär att beslut som rör modellerna i <code class=\"docutils literal notranslate\"><span class=\"pre\">auth</span></code> bearbetas innan något annat beslut fattas. Om inställningen <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-DATABASE_ROUTERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASE_ROUTERS</span></code></a> hade listat de två routrarna i en annan ordning skulle <code class=\"docutils literal notranslate\"><span class=\"pre\">PrimaryReplicaRouter.allow_migrate()</span></code> bearbetas först. PrimaryReplicaRouter-implementeringens catch-all-karaktär skulle innebära att alla modeller skulle vara tillgängliga i alla databaser.</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\">Synkronisering av dina databaser</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><span class=\"n\">fred</span> <span class=\"o\">=</span> <span class=\"n\">User</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">username</span><span class=\"o\">=</span><span class=\"s2\">&quot;fred&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">fred</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <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><span class=\"n\">fred</span><span class=\"o\">.</span><span class=\"n\">save</span><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><span class=\"n\">dna</span> <span class=\"o\">=</span> <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name</span><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><span class=\"n\">mh</span> <span class=\"o\">=</span> <span class=\"n\">Book</span><span class=\"p\">(</span><span class=\"n\">title</span><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><span class=\"n\">mh</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">dna</span>\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><span class=\"n\">mh</span><span class=\"o\">.</span><span class=\"n\">save</span><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><span class=\"n\">mh</span> <span class=\"o\">=</span> <span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s2\">&quot;Mostly Harmless&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>I det här exemplet definierades en router för att hantera interaktion med modeller från appen <code class=\"docutils literal notranslate\"><span class=\"pre\">auth</span></code> och andra routrar för att hantera interaktion med alla andra appar. Om du har lämnat din <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code>-databas tom och inte vill definiera en allomfattande databasrouter för att hantera alla appar som inte anges på annat sätt, måste dina routrar hantera namnen på alla appar i <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> innan du migrerar. Se <a class=\"reference internal\" href=\"#contrib-app-multiple-databases\"><span class=\"std std-ref\">Beteende hos Contrib-appar</span></a> för information om contrib-appar som måste vara samlade i en databas.</p>\n</section>\n</section>\n<section id=\"manually-selecting-a-database\">\n<h2>Manuellt val av databas<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>Django tillhandahåller också ett API som gör att du kan behålla fullständig kontroll över databasanvändningen i din kod. En manuellt angiven databasallokering kommer att prioriteras framför en databas som allokerats av en router.</p>\n<section id=\"manually-selecting-a-database-for-a-queryset\">\n<h3>Manuellt val av databas för en <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></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>Du kan välja databas för ett <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> när som helst i <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> ”kedjan” Anropa <code class=\"docutils literal notranslate\"><span class=\"pre\">using()</span></code> på <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> för att få ett annat <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> som använder den angivna databasen.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">using()</span></code> tar ett enda argument: aliaset för den databas som du vill köra frågan på. Till exempel:</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><span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><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><span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">using</span><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><span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">using</span><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>Välja en databas för <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code><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>Använd nyckelordet <code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">Model.save()</span></code> för att ange till vilken databas data ska sparas.</p>\n<p>Om du t.ex. vill spara ett objekt i databasen <code class=\"docutils literal notranslate\"><span class=\"pre\">legacy_users</span></code> använder du följande:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">my_object</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">using</span><span class=\"o\">=</span><span class=\"s2\">&quot;legacy_users&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Om du inte anger <code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code> kommer metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> att spara i den standarddatabas som routrarna har tilldelat.</p>\n<section id=\"moving-an-object-from-one-database-to-another\">\n<h4>Flytta ett objekt från en databas till en annan<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>Om du har sparat en instans i en databas kan det vara frestande att använda <code class=\"docutils literal notranslate\"><span class=\"pre\">save(using=...)</span></code> som ett sätt att migrera instansen till en ny databas. Men om du inte vidtar lämpliga åtgärder kan detta få oväntade konsekvenser.</p>\n<p>Tänk på följande exempel:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">Person</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Fred&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">using</span><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><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">using</span><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 uttalande 1 sparas ett nytt <code class=\"docutils literal notranslate\"><span class=\"pre\">Person</span></code>-objekt i databasen <code class=\"docutils literal notranslate\"><span class=\"pre\">first</span></code>. Vid denna tidpunkt har <code class=\"docutils literal notranslate\"><span class=\"pre\">p</span></code> ingen primärnyckel, så Django utfärdar en SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">INSERT</span></code>-sats. Detta skapar en primärnyckel och Django tilldelar den primära nyckeln till <code class=\"docutils literal notranslate\"><span class=\"pre\">p</span></code>.</p>\n<p>När sparandet sker i uttalande 2 har <code class=\"docutils literal notranslate\"><span class=\"pre\">p</span></code> redan ett primärnyckelvärde, och Django kommer att försöka använda den primärnyckeln i den nya databasen. Om det primära nyckelvärdet inte används i den <code class=\"docutils literal notranslate\"><span class=\"pre\">andra</span></code> databasen, kommer du inte att ha några problem - objektet kommer att kopieras till den nya databasen.</p>\n<p>Men om primärnyckeln i <code class=\"docutils literal notranslate\"><span class=\"pre\">p</span></code> redan används i databasen <code class=\"docutils literal notranslate\"><span class=\"pre\">second</span></code>, kommer det befintliga objektet i databasen <code class=\"docutils literal notranslate\"><span class=\"pre\">second</span></code> att åsidosättas när <code class=\"docutils literal notranslate\"><span class=\"pre\">p</span></code> sparas.</p>\n<p>Du kan undvika detta på två sätt. För det första kan du rensa instansens primära nyckel. Om ett objekt inte har någon primärnyckel kommer Django att behandla det som ett nytt objekt, vilket undviker förlust av data i <code class=\"docutils literal notranslate\"><span class=\"pre\">andra</span></code> databasen:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">Person</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Fred&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">using</span><span class=\"o\">=</span><span class=\"s2\">&quot;first&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">pk</span> <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><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">using</span><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>Det andra alternativet är att använda alternativet <code class=\"docutils literal notranslate\"><span class=\"pre\">force_insert</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> för att säkerställa att Django gör en SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">INSERT</span></code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">Person</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Fred&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">using</span><span class=\"o\">=</span><span class=\"s2\">&quot;first&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">using</span><span class=\"o\">=</span><span class=\"s2\">&quot;second&quot;</span><span class=\"p\">,</span> <span class=\"n\">force_insert</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Detta kommer att säkerställa att personen som heter <code class=\"docutils literal notranslate\"><span class=\"pre\">Fred</span></code> kommer att ha samma primärnyckel i båda databaserna. Om den primära nyckeln redan används när du försöker spara i den ”andra” databasen, kommer ett fel att uppstå.</p>\n</section>\n</section>\n<section id=\"selecting-a-database-to-delete-from\">\n<h3>Välja en databas att ta bort från<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>Som standard kommer ett anrop för att ta bort ett befintligt objekt att utföras i samma databas som användes för att hämta objektet från första början:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">u</span> <span class=\"o\">=</span> <span class=\"n\">User</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">(</span><span class=\"s2\">&quot;legacy_users&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">username</span><span class=\"o\">=</span><span class=\"s2\">&quot;fred&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">u</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>  <span class=\"c1\"># will delete from the `legacy_users` database</span>\n</code></pre></div>\n<p>För att ange databasen från vilken en modell ska raderas, skicka ett <code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code> nyckelordsargument till metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">Model.delete()</span></code>. Detta argument fungerar precis som nyckelordsargumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code>.</p>\n<p>Om du t.ex. ska flytta en användare från databasen <code class=\"docutils literal notranslate\"><span class=\"pre\">legacy_users</span></code> till databasen <code class=\"docutils literal notranslate\"><span class=\"pre\">new_users</span></code> kan du använda följande kommandon:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">user_obj</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">using</span><span class=\"o\">=</span><span class=\"s2\">&quot;new_users&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">user_obj</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">(</span><span class=\"n\">using</span><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>Använda chefer med flera databaser<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>Använd metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">db_manager()</span></code> på managers för att ge managers tillgång till en databas som inte är standard.</p>\n<p>Anta till exempel att du har en anpassad managermetod som berör databasen - <code class=\"docutils literal notranslate\"><span class=\"pre\">User.objects.create_user()</span></code>. Eftersom <code class=\"docutils literal notranslate\"><span class=\"pre\">create_user()</span></code> är en managermetod, inte en <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>-metod, kan du inte göra <code class=\"docutils literal notranslate\"><span class=\"pre\">User.objects.using('new_users').create_user()</span></code>. (Metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">create_user()</span></code> är endast tillgänglig på <code class=\"docutils literal notranslate\"><span class=\"pre\">User.objects</span></code>, hanteraren, inte på <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>-objekt som härrör från hanteraren) Lösningen är att använda <code class=\"docutils literal notranslate\"><span class=\"pre\">db_manager()</span></code>, så här:</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\">User</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">db_manager</span><span class=\"p\">(</span><span class=\"s2\">&quot;new_users&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">create_user</span><span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">db_manager()</span></code> returnerar en kopia av den manager som är knuten till den databas du anger.</p>\n<section id=\"using-get-queryset-with-multiple-databases\">\n<h4>Använda <code class=\"docutils literal notranslate\"><span class=\"pre\">get_queryset()</span></code> med flera databaser<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>Om du åsidosätter <code class=\"docutils literal notranslate\"><span class=\"pre\">get_queryset()</span></code> på din manager, se till att antingen anropa metoden på den överordnade (med <code class=\"docutils literal notranslate\"><span class=\"pre\">super()</span></code>) eller gör lämplig hantering av <code class=\"docutils literal notranslate\"><span class=\"pre\">_db</span></code>-attributet på managern (en sträng som innehåller namnet på den databas som ska användas).</p>\n<p>Om du till exempel vill returnera en anpassad <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>-klass från <code class=\"docutils literal notranslate\"><span class=\"pre\">get_queryset</span></code>-metoden kan du göra så här:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyManager</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Manager</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">qs</span> <span class=\"o\">=</span> <span class=\"n\">CustomQuerySet</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_db</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">qs</span> <span class=\"o\">=</span> <span class=\"n\">qs</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_db</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">qs</span>\n</code></pre></div>\n</section>\n</section>\n</section>\n<section id=\"exposing-multiple-databases-in-django-s-admin-interface\">\n<h2>Exponering av flera databaser i Djangos admin-gränssnitt<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>Djangos admin har inte något uttryckligt stöd för flera databaser. Om du vill tillhandahålla ett administratörsgränssnitt för en modell på en annan databas än den som anges av din routerkedja måste du skriva anpassade <a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code></a>-klasser som kommer att styra administratören att använda en specifik databas för innehåll.</p>\n<p>objekten <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> har följande metoder som kräver anpassning för stöd för flera databaser:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MultiDBModelAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"c1\"># A handy constant for the name of the alternate database.</span>\n    <span class=\"n\">using</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;other&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">save_model</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"p\">,</span> <span class=\"n\">change</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Tell Django to save objects to the &#39;other&#39; database.</span>\n        <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">using</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">delete_model</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Tell Django to delete objects from the &#39;other&#39; database</span>\n        <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">(</span><span class=\"n\">using</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><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><span class=\"n\">get_queryset</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">formfield_for_foreignkey</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">db_field</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><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><span class=\"n\">formfield_for_foreignkey</span><span class=\"p\">(</span>\n            <span class=\"n\">db_field</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">using</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">formfield_for_manytomany</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">db_field</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><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><span class=\"n\">formfield_for_manytomany</span><span class=\"p\">(</span>\n            <span class=\"n\">db_field</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">using</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span>\n        <span class=\"p\">)</span>\n</code></pre></div>\n<p>Den implementering som tillhandahålls här implementerar en strategi med flera databaser där alla objekt av en viss typ lagras i en specifik databas (t.ex. alla <code class=\"docutils literal notranslate\"><span class=\"pre\">User</span></code>-objekt finns i databasen <code class=\"docutils literal notranslate\"><span class=\"pre\">other</span></code>). Om din användning av flera databaser är mer komplex måste din <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> återspegla den strategin.</p>\n<p><a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/admin/#django.contrib.admin.InlineModelAdmin\" title=\"django.contrib.admin.InlineModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">InlineModelAdmin</span></code></a>-objekt kan hanteras på ett liknande sätt. De kräver tre anpassade metoder:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MultiDBTabularInline</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">TabularInline</span><span class=\"p\">):</span>\n    <span class=\"n\">using</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;other&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><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><span class=\"n\">get_queryset</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">formfield_for_foreignkey</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">db_field</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><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><span class=\"n\">formfield_for_foreignkey</span><span class=\"p\">(</span>\n            <span class=\"n\">db_field</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">using</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">formfield_for_manytomany</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">db_field</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><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><span class=\"n\">formfield_for_manytomany</span><span class=\"p\">(</span>\n            <span class=\"n\">db_field</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">using</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span>\n        <span class=\"p\">)</span>\n</code></pre></div>\n<p>När du har skrivit dina modelladministratörsdefinitioner kan de registreras med valfri <code class=\"docutils literal notranslate\"><span class=\"pre\">Admin</span></code>-instans:</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.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">Book</span><span class=\"p\">,</span> <span class=\"n\">Publisher</span>\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=\"w\"> </span><span class=\"nn\">myproject.admin</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">MultiDBModelAdmin</span><span class=\"p\">,</span> <span class=\"n\">MultiDBTabularInline</span>\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=\"w\"> </span><span class=\"nc\">BookInline</span><span class=\"p\">(</span><span class=\"n\">MultiDBTabularInline</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Book</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PublisherAdmin</span><span class=\"p\">(</span><span class=\"n\">MultiDBModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">inlines</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">BookInline</span><span class=\"p\">]</span>\n\n\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">MultiDBModelAdmin</span><span class=\"p\">)</span>\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">Publisher</span><span class=\"p\">,</span> <span class=\"n\">PublisherAdmin</span><span class=\"p\">)</span>\n\n<span class=\"n\">othersite</span> <span class=\"o\">=</span> <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">AdminSite</span><span class=\"p\">(</span><span class=\"s2\">&quot;othersite&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">othersite</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">Publisher</span><span class=\"p\">,</span> <span class=\"n\">MultiDBModelAdmin</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>I detta exempel skapas två administratörswebbplatser. På den första webbplatsen exponeras objekten <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">Publisher</span></code>; <code class=\"docutils literal notranslate\"><span class=\"pre\">Publisher</span></code>-objekten har en tabulär inline som visar böcker som publicerats av det förlaget. Den andra webbplatsen exponerar bara förläggare, utan inlines.</p>\n</section>\n<section id=\"using-raw-cursors-with-multiple-databases\">\n<h2>Använda råa markörer med flera databaser<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>Om du använder mer än en databas kan du använda <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.connections</span></code> för att få anslutningen (och markören) för en specifik databas. <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.connections</span></code> är ett ordboksliknande objekt som gör att du kan hämta en specifik anslutning med hjälp av dess alias:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">connections</span>\n\n<span class=\"k\">with</span> <span class=\"n\">connections</span><span class=\"p\">[</span><span class=\"s2\">&quot;my_db_alias&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">cursor</span><span class=\"p\">()</span> <span class=\"k\">as</span> <span class=\"n\">cursor</span><span class=\"p\">:</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n</section>\n<section id=\"limitations-of-multiple-databases\">\n<h2>Begränsningar med flera databaser<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>Relationer mellan olika databaser<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>Django ger för närvarande inget stöd för foreign key eller many-to-many-relationer som sträcker sig över flera databaser. Om du har använt en router för att partitionera modeller till olika databaser måste alla foreign key- och many-to-many-relationer som definieras av dessa modeller vara interna i en enda databas.</p>\n<p>Detta beror på referentiell integritet. För att kunna upprätthålla en relation mellan två objekt måste Django veta att primärnyckeln för det relaterade objektet är giltig. Om primärnyckeln lagras i en separat databas är det inte möjligt att enkelt utvärdera giltigheten för en primärnyckel.</p>\n<p>Om du använder Postgres, SQLite, Oracle eller MySQL med InnoDB verkställs detta på databasintegritetsnivå - nyckelbegränsningar på databasnivå förhindrar att relationer skapas som inte kan valideras.</p>\n<p>Men om du använder MySQL med MyISAM-tabeller finns det ingen påtvingad referensintegritet; som ett resultat kan du kanske ”fejka” utländska nycklar i korsdatabasen. Denna konfiguration stöds dock inte officiellt av Django.</p>\n</section>\n<section id=\"behavior-of-contrib-apps\">\n<span id=\"contrib-app-multiple-databases\"></span><h3>Beteende hos Contrib-appar<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>Flera Contrib-appar innehåller modeller, och vissa appar är beroende av andra. Eftersom relationer mellan databaser är omöjliga skapar detta vissa begränsningar för hur du kan dela dessa modeller mellan olika databaser:</p>\n<ul class=\"simple\">\n<li><p>var och en av <code class=\"docutils literal notranslate\"><span class=\"pre\">contenttypes.ContentType</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">sessions.Session</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">sites.Site</span></code> kan lagras i vilken databas som helst, förutsatt att en lämplig router används.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">auth</span></code>-modellerna - <code class=\"docutils literal notranslate\"><span class=\"pre\">User</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">Group</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">Permission</span></code> - är sammanlänkade och länkade till <code class=\"docutils literal notranslate\"><span class=\"pre\">ContentType</span></code>, så de måste lagras i samma databas som <code class=\"docutils literal notranslate\"><span class=\"pre\">ContentType</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">admin</span></code> är beroende av <code class=\"docutils literal notranslate\"><span class=\"pre\">auth</span></code>, så dess modeller måste finnas i samma databas som <code class=\"docutils literal notranslate\"><span class=\"pre\">auth</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">flatpages</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">redirects</span></code> är beroende av <code class=\"docutils literal notranslate\"><span class=\"pre\">sites</span></code>, så deras modeller måste finnas i samma databas som <code class=\"docutils literal notranslate\"><span class=\"pre\">sites</span></code>.</p></li>\n</ul>\n<p>Dessutom skapas vissa objekt automatiskt strax efter att <a class=\"reference internal\" href=\"/sv/6.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> har skapat en tabell för att hålla dem i en databas:</p>\n<ul class=\"simple\">\n<li><p>en förvald <code class=\"docutils literal notranslate\"><span class=\"pre\">Site</span></code>,</p></li>\n<li><p>en <code class=\"docutils literal notranslate\"><span class=\"pre\">ContentType</span></code> för varje modell (även de som inte finns lagrade i databasen),</p></li>\n<li><p>”Tillstånd” för varje modell (även de som inte lagras i databasen).</p></li>\n</ul>\n<p>För vanliga konfigurationer med flera databaser är det inte användbart att ha dessa objekt i mer än en databas. Vanliga konfigurationer inkluderar primär/replika och anslutning till externa databaser. Därför rekommenderas det att skriva en <a class=\"reference internal\" href=\"#topics-db-multi-db-routing\"><span class=\"std std-ref\">databasrouter</span></a> som gör det möjligt att synkronisera dessa tre modeller till endast en databas. Använd samma tillvägagångssätt för contrib- och tredjepartsappar som inte behöver sina tabeller i flera databaser.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Om du synkroniserar innehållstyper till mer än en databas bör du vara medveten om att deras primärnycklar kanske inte stämmer överens mellan databaserna. Detta kan leda till datakorruption eller dataförlust.</p>\n</aside>\n</section>\n</section>","rootId":"multiple-databases","toc":[{"title":"Definiera dina databaser","anchor":"defining-your-databases","children":[]},{"title":"Synkronisering av dina databaser","anchor":"synchronizing-your-databases","children":[{"title":"Använda andra hanteringskommandon","anchor":"using-other-management-commands","children":[]}]},{"title":"Automatisk routning av databaser","anchor":"automatic-database-routing","children":[{"title":"Databasroutrar","anchor":"database-routers","children":[{"title":"Tips","anchor":"hints","children":[]}]},{"title":"Använda routrar","anchor":"using-routers","children":[]},{"title":"Ett exempel","anchor":"an-example","children":[]}]},{"title":"Manuellt val av databas","anchor":"manually-selecting-a-database","children":[{"title":"Manuellt val av databas för en QuerySet","anchor":"manually-selecting-a-database-for-a-queryset","children":[]},{"title":"Välja en databas för save()","anchor":"selecting-a-database-for-save","children":[{"title":"Flytta ett objekt från en databas till en annan","anchor":"moving-an-object-from-one-database-to-another","children":[]}]},{"title":"Välja en databas att ta bort från","anchor":"selecting-a-database-to-delete-from","children":[]},{"title":"Använda chefer med flera databaser","anchor":"using-managers-with-multiple-databases","children":[{"title":"Använda get_queryset() med flera databaser","anchor":"using-get-queryset-with-multiple-databases","children":[]}]}]},{"title":"Exponering av flera databaser i Djangos admin-gränssnitt","anchor":"exposing-multiple-databases-in-django-s-admin-interface","children":[]},{"title":"Använda råa markörer med flera databaser","anchor":"using-raw-cursors-with-multiple-databases","children":[]},{"title":"Begränsningar med flera databaser","anchor":"limitations-of-multiple-databases","children":[{"title":"Relationer mellan olika databaser","anchor":"cross-database-relations","children":[]},{"title":"Beteende hos Contrib-appar","anchor":"behavior-of-contrib-apps","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Använda Django","url":"/sv/6.0/topics/"},{"docname":"topics/db/index","title":"Modeller och databaser","url":"/sv/6.0/topics/db/"}],"prev":{"docname":"topics/db/transactions","title":"Databastransaktioner","url":"/sv/6.0/topics/db/transactions/"},"next":{"docname":"topics/db/tablespaces","title":"Bordsytor","url":"/sv/6.0/topics/db/tablespaces/"},"formats":{"html":"/sv/6.0/topics/db/multi-db/","markdown":"/sv/6.0/topics/db/multi-db.md","json":"/sv/6.0/topics/db/multi-db.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/topics/db/multi-db.txt","official":"https://docs.djangoproject.com/sv/6.0/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"]}