{"title":"Databaser","version":"6.1","locale":"sv","docname":"ref/databases","url":"/sv/6.1/ref/databases/","canonical":"https://djangodocs.dev/sv/6.1/ref/databases/","summary":"Django har officiellt stöd för följande databaser: PostgreSQL, MariaDB, MySQL, Oracle, SQLite.","html":"<h1>Databaser<a class=\"heading-anchor\" href=\"#databases\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django har officiellt stöd för följande databaser:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"#postgresql-notes\"><span class=\"std std-ref\">PostgreSQL</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#mariadb-notes\"><span class=\"std std-ref\">MariaDB</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#mysql-notes\"><span class=\"std std-ref\">MySQL</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#oracle-notes\"><span class=\"std std-ref\">Oracle</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#sqlite-notes\"><span class=\"std std-ref\">SQLite</span></a></p></li>\n</ul>\n<p>Det finns också ett antal <a class=\"reference internal\" href=\"#third-party-notes\"><span class=\"std std-ref\">databasbackends som tillhandahålls av tredje part</span></a>.</p>\n<p>Django försöker att stödja så många funktioner som möjligt på alla databasbackends. Alla databasbackends är dock inte likadana, och vi har varit tvungna att fatta designbeslut om vilka funktioner som ska stödjas och vilka antaganden vi kan göra på ett säkert sätt.</p>\n<p>Den här filen beskriver några av de funktioner som kan vara relevanta för Django-användning. Den är inte avsedd att ersätta serverspecifik dokumentation eller referenshandböcker.</p>\n<section id=\"general-notes\">\n<h2>Allmänna anteckningar<a class=\"heading-anchor\" href=\"#general-notes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"persistent-connections\">\n<span id=\"persistent-database-connections\"></span><h3>Beständiga anslutningar<a class=\"heading-anchor\" href=\"#persistent-connections\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Med beständiga anslutningar undviks omkostnaderna för att återupprätta en anslutning till databasen vid varje HTTP-begäran. De styrs av parametern <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-CONN_MAX_AGE\"><code class=\"xref std std-setting docutils literal notranslate\">CONN_MAX_AGE</code></a> som definierar den maximala livslängden för en anslutning. Den kan ställas in oberoende för varje databas.</p>\n<p>Standardvärdet är <code class=\"docutils literal notranslate\">0</code>, vilket bevarar det historiska beteendet att stänga databasanslutningen i slutet av varje begäran. För att aktivera långvariga anslutningar, ställ in <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-CONN_MAX_AGE\"><code class=\"xref std std-setting docutils literal notranslate\">CONN_MAX_AGE</code></a> till ett positivt heltal av sekunder. För obegränsade långvariga anslutningar, ställ in den på <code class=\"docutils literal notranslate\">None</code>.</p>\n<p>När ASGI används bör permanenta anslutningar inaktiveras. Använd istället databasens inbyggda anslutningspoolning om den finns tillgänglig, eller undersök ett alternativ för anslutningspoolning från tredje part om det behövs.</p>\n<section id=\"connection-management\">\n<h4>Hantering av anslutningar<a class=\"heading-anchor\" href=\"#connection-management\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Django öppnar en anslutning till databasen när den först gör en databasförfrågan. Den håller denna anslutning öppen och återanvänder den i efterföljande förfrågningar. Django stänger anslutningen när den överskrider den maximala ålder som definieras av <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-CONN_MAX_AGE\"><code class=\"xref std std-setting docutils literal notranslate\">CONN_MAX_AGE</code></a> eller när den inte längre kan användas.</p>\n<p>I detalj öppnar Django automatiskt en anslutning till databasen när den behöver en och inte redan har en - antingen för att detta är den första anslutningen eller för att den tidigare anslutningen stängdes.</p>\n<p>I början av varje begäran stänger Django anslutningen om den har nått sin maximala ålder. Om din databas avslutar inaktiva anslutningar efter en viss tid bör du ställa in <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-CONN_MAX_AGE\"><code class=\"xref std std-setting docutils literal notranslate\">CONN_MAX_AGE</code></a> till ett lägre värde, så att Django inte försöker använda en anslutning som har avslutats av databasservern. (Detta problem kan endast påverka webbplatser med mycket låg trafik)</p>\n<p>I slutet av varje begäran stänger Django anslutningen om den har nått sin maximala ålder eller om den befinner sig i ett feltillstånd som inte kan återställas. Om några databasfel har inträffat under behandlingen av begärandena kontrollerar Django om anslutningen fortfarande fungerar och stänger den om den inte gör det. Databasfel påverkar således högst en begäran per varje applikations arbetstråd; om anslutningen blir oanvändbar får nästa begäran en ny anslutning.</p>\n<p>Om du sätter <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-CONN_HEALTH_CHECKS\"><code class=\"xref std std-setting docutils literal notranslate\">CONN_HEALTH_CHECKS</code></a> till <code class=\"docutils literal notranslate\">True</code> kan du förbättra robustheten för återanvändning av anslutningar och förhindra fel när en anslutning har stängts av databasservern som nu är redo att ta emot och hantera nya anslutningar, t.ex. efter omstart av databasservern. Hälsokontrollen utförs endast en gång per begäran och endast om databasen nås under hanteringen av begäran.</p>\n</section>\n<section id=\"caveats\">\n<h4>Förbehåll<a class=\"heading-anchor\" href=\"#caveats\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Eftersom varje tråd upprätthåller sin egen anslutning måste din databas stödja minst lika många samtidiga anslutningar som du har arbetstrådar.</p>\n<p>Ibland kommer majoriteten av dina vyer inte åt en databas, t.ex. för att det är databasen för ett externt system eller tack vare cachning. I sådana fall bör du ställa in <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-CONN_MAX_AGE\"><code class=\"xref std std-setting docutils literal notranslate\">CONN_MAX_AGE</code></a> till ett lågt värde eller till och med <code class=\"docutils literal notranslate\">0</code>, eftersom det inte är meningsfullt att upprätthålla en anslutning som sannolikt inte kommer att återanvändas. Detta bidrar till att hålla nere antalet samtidiga anslutningar till databasen.</p>\n<p>Utvecklingsservern skapar en ny tråd för varje begäran som den hanterar, vilket upphäver effekten av beständiga anslutningar. Aktivera dem inte under utveckling.</p>\n<p>När Django upprättar en anslutning till databasen ställer den in lämpliga parametrar, beroende på vilken backend som används. Om du aktiverar beständiga anslutningar upprepas inte längre denna inställning vid varje begäran. Om du ändrar parametrar som anslutningens isoleringsnivå eller tidszon, bör du antingen återställa Djangos standardvärden i slutet av varje begäran, tvinga fram ett lämpligt värde i början av varje begäran eller inaktivera beständiga anslutningar.</p>\n<p>Om en anslutning skapas i en långvarig process, utanför Djangos request-response-cykel, kommer anslutningen att förbli öppen tills den uttryckligen stängs eller timeout inträffar. Du kan använda <code class=\"docutils literal notranslate\">django.db.close_old_connections()</code> för att stänga alla gamla eller oanvändbara anslutningar.</p>\n</section>\n</section>\n<section id=\"encoding\">\n<h3>Avkodning<a class=\"heading-anchor\" href=\"#encoding\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django förutsätter att alla databaser använder UTF-8-kodning. Om du använder andra kodningar kan det leda till oväntat beteende, till exempel ”värdet är för långt”-fel från din databas för data som är giltiga i Django. Se de databasspecifika anmärkningarna nedan för information om hur du konfigurerar din databas korrekt.</p>\n</section>\n</section>\n<section id=\"postgresql-notes\">\n<span id=\"id1\"></span><h2>PostgreSQL anteckningar<a class=\"heading-anchor\" href=\"#postgresql-notes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django stöder PostgreSQL 15 och senare. <a class=\"reference external\" href=\"https://www.psycopg.org/psycopg3/\">psycopg</a> 3.1.12+ eller <a class=\"reference external\" href=\"https://www.psycopg.org/\">psycopg2</a> 2.9.9+ krävs, men den senaste <a class=\"reference external\" href=\"https://www.psycopg.org/psycopg3/\">psycopg</a> 3.1.12+ rekommenderas.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Stöd för <code class=\"docutils literal notranslate\">psycopg2</code> kommer sannolikt att bli föråldrat och tas bort någon gång i framtiden.</p>\n</aside>\n<section id=\"postgresql-connection-settings\">\n<span id=\"id2\"></span><h3>PostgreSQL-anslutningsinställningar<a class=\"heading-anchor\" href=\"#postgresql-connection-settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Se <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-HOST\"><code class=\"xref std std-setting docutils literal notranslate\">HOST</code></a> för mer information.</p>\n<p>Om du vill ansluta med ett servicenamn från <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/libpq-pgservice.html\">connection service file</a> och ett lösenord från <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/libpq-pgpass.html\">password file</a> måste du ange dem i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">OPTIONS</code></a>-delen av din databaskonfiguration i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\">DATABASES</code></a>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">settings.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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 code\"><code>DATABASES <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;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;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;service&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;my_service&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;passfile&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;.my_pgpass&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"text\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">.pg_service.conf</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>[my_service]\nhost=localhost\nuser=USER\ndbname=NAME\nport=5432\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"text\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">.my_pgpass</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>localhost:5432:NAME:USER:PASSWORD\n</code></pre></figure>\n<p>PostgreSQL-backend skickar innehållet i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">OPTIONS</code></a> som nyckelordsargument till anslutningskonstruktören, vilket möjliggör mer avancerad kontroll av drivrutinsbeteendet. Alla tillgängliga <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-PARAMKEYWORDS\">parametrar</a> beskrivs i detalj i PostgreSQL-dokumentationen.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Att använda ett servicenamn för teständamål stöds inte. Denna <a class=\"extlink-ticket reference external\" href=\"https://code.djangoproject.com/ticket/33685\">kan komma att implementeras senare</a>.</p>\n</aside>\n</section>\n<section id=\"optimizing-postgresql-s-configuration\">\n<h3>Optimera PostgreSQL: s konfiguration<a class=\"heading-anchor\" href=\"#optimizing-postgresql-s-configuration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django behöver följande parametrar för sina databasanslutningar:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">client_encoding</code>: <code class=\"docutils literal notranslate\">'UTF8'</code>,</p></li>\n<li><p><code class=\"docutils literal notranslate\">default_transaction_isolation</code>: <code class=\"docutils literal notranslate\">'read committed'</code> som standard, eller det värde som anges i anslutningsalternativen (se nedan),</p></li>\n<li><dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\">tidszon</code>:</dt><dd><ul>\n<li><p>när <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\">USE_TZ</code></a> är <code class=\"docutils literal notranslate\">True</code>, <code class=\"docutils literal notranslate\">'UTC'</code> som standard, eller det värde som <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-DATABASE-TIME_ZONE\"><code class=\"xref std std-setting docutils literal notranslate\">TIME_ZONE</code></a> har ställts in för anslutningen,</p></li>\n<li><p>när <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\">USE_TZ</code></a> är <code class=\"docutils literal notranslate\">False</code>, värdet av den globala <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-TIME_ZONE\"><code class=\"xref std std-setting docutils literal notranslate\">TIME_ZONE</code></a>-inställningen.</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n<p>Om dessa parametrar redan har rätt värden kommer Django inte att ställa in dem för varje ny anslutning, vilket förbättrar prestandan något. Du kan konfigurera dem direkt i <code class=\"file docutils literal notranslate\">postgresql.conf</code> eller mer bekvämt per databasanvändare med <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/sql-alterrole.html\">ALTER ROLE</a>.</p>\n<p>Django fungerar bra utan denna optimering, men varje ny anslutning kommer att göra några ytterligare frågor för att ställa in dessa parametrar.</p>\n</section>\n<section id=\"isolation-level\">\n<span id=\"database-isolation-level\"></span><h3>Isolationsnivå<a class=\"heading-anchor\" href=\"#isolation-level\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Liksom PostgreSQL själv, är Django standard för <code class=\"docutils literal notranslate\">READ COMMITTED</code> <code class=\"docutils literal notranslate\">isoleringsnivå`_. Om du behöver en högre isoleringsnivå, till exempel ``REPEATABLE READ</code> eller <code class=\"docutils literal notranslate\">SERIALIZABLE</code>, ställer du in den i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">OPTIONS</code></a>-delen av din databaskonfiguration i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\">DATABASES</code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db.backends.postgresql.psycopg_any</span> <span class=\"kn\">import</span> IsolationLevel\n\nDATABASES <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;isolation_level&quot;</span><span class=\"p\">:</span> IsolationLevel<span class=\"o\">.</span>SERIALIZABLE<span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Vid högre isoleringsnivåer bör ditt program vara förberett på att hantera undantag som uppstår vid serialiseringsfel. Det här alternativet är avsett för avancerad användning.</p>\n</aside>\n</section>\n<section id=\"role\">\n<span id=\"database-role\"></span><h3>Roll<a class=\"heading-anchor\" href=\"#role\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du behöver använda en annan roll för databasanslutningar än den roll som används för att upprätta anslutningen, anger du den i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">OPTIONS</code></a>-delen av din databaskonfiguration i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\">DATABASES</code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>DATABASES <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.db.backends.postgresql&quot;</span><span class=\"p\">,</span>\n        <span class=\"c1\"># ...</span>\n        <span class=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;assume_role&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;my_application_role&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n</section>\n<section id=\"connection-pool\">\n<span id=\"postgresql-pool\"></span><h3>Anslutningspool<a class=\"heading-anchor\" href=\"#connection-pool\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Connection pooling allows connections to be reused across threads, reducing\nconnection setup overhead. When enabled, Django maintains a separate pool for\neach database alias in each process. Closing a Django database connection\nreturns it to the pool for reuse.</p>\n<p>Connection pooling is supported only with <a class=\"reference external\" href=\"https://www.psycopg.org/psycopg3/\">psycopg</a> and requires\n<code class=\"docutils literal notranslate\">psycopg[pool]</code> (which installs <a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/psycopg-pool/\">psycopg-pool</a>).</p>\n<p>To enable connection pooling, set <code class=\"docutils literal notranslate\">&quot;pool&quot;</code> in the <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">OPTIONS</code></a> part of\nyour database configuration in <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\">DATABASES</code></a> to a dictionary of options\nto pass to <a class=\"reference external\" href=\"https://www.psycopg.org/psycopg3/docs/api/pool.html#psycopg_pool.ConnectionPool\" title=\"(in psycopg)\"><code class=\"xref py py-class docutils literal notranslate\">ConnectionPool</code></a>, or to <code class=\"docutils literal notranslate\">True</code> to use\nthe <a class=\"reference external\" href=\"https://www.psycopg.org/psycopg3/docs/api/pool.html#psycopg_pool.ConnectionPool\" title=\"(in psycopg)\"><code class=\"xref py py-class docutils literal notranslate\">ConnectionPool</code></a> defaults:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>DATABASES <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.db.backends.postgresql&quot;</span><span class=\"p\">,</span>\n        <span class=\"c1\"># ...</span>\n        <span class=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;pool&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>The <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-CONN_MAX_AGE\"><code class=\"xref std std-setting docutils literal notranslate\">CONN_MAX_AGE</code></a> setting must be <code class=\"docutils literal notranslate\">0</code> when connection pooling is\nenabled. Configure connection lifetime with the <code class=\"docutils literal notranslate\">max_lifetime</code> pool option\ninstead.</p>\n<p>Unless a <code class=\"docutils literal notranslate\">check</code> callback is provided in the pool options,\n<a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-CONN_HEALTH_CHECKS\"><code class=\"xref std std-setting docutils literal notranslate\">CONN_HEALTH_CHECKS</code></a> determines whether connections are checked when\nretrieved from the pool.</p>\n</section>\n<section id=\"server-side-parameters-binding\">\n<span id=\"database-server-side-parameters-binding\"></span><h3>Bindning av parametrar på serversidan<a class=\"heading-anchor\" href=\"#server-side-parameters-binding\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Med <a class=\"reference external\" href=\"https://www.psycopg.org/psycopg3/\">psycopg</a> 3.1.8+ använder Django som standard <a class=\"reference external\" href=\"https://www.psycopg.org/psycopg3/docs/advanced/cursors.html#client-side-binding-cursors\" title=\"(in psycopg)\"><span class=\"xref std std-ref\">client-side binding cursors</span></a>. Om du vill använda <a class=\"reference external\" href=\"https://www.psycopg.org/psycopg3/docs/basic/from_pg2.html#server-side-binding\" title=\"(in psycopg)\"><span class=\"xref std std-ref\">server-side binding</span></a> ställ in det i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">OPTIONS</code></a>-delen av din databaskonfiguration i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\">DATABASES</code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>DATABASES <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.db.backends.postgresql&quot;</span><span class=\"p\">,</span>\n        <span class=\"c1\"># ...</span>\n        <span class=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;server_side_binding&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>Detta alternativ ignoreras med <code class=\"docutils literal notranslate\">psycopg2</code>.</p>\n</section>\n<section id=\"indexes-for-varchar-and-text-columns\">\n<h3>Index för kolumnerna <code class=\"docutils literal notranslate\">varchar</code> och <code class=\"docutils literal notranslate\">text</code><a class=\"heading-anchor\" href=\"#indexes-for-varchar-and-text-columns\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>När du anger <code class=\"docutils literal notranslate\">db_index=True</code> för modellfält matar Django vanligen ut en enda <code class=\"docutils literal notranslate\">CREATE INDEX</code>-sats. Om databasens fälttyp däremot är <code class=\"docutils literal notranslate\">varchar</code> eller <code class=\"docutils literal notranslate\">text</code> (t.ex. används av <code class=\"docutils literal notranslate\">CharField</code>, <code class=\"docutils literal notranslate\">FileField</code> och <code class=\"docutils literal notranslate\">TextField</code>) skapar Django ett ytterligare index som använder en lämplig <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/indexes-opclass.html\">PostgreSQL-operator­klass</a> för kolumnen. Det extra indexet behövs för att korrekt utföra uppslag som använder operatorn <code class=\"docutils literal notranslate\">LIKE</code> i sin SQL, vilket görs av uppslagstyperna <code class=\"docutils literal notranslate\">contains</code> och <code class=\"docutils literal notranslate\">startswith</code>.</p>\n</section>\n<section id=\"migration-operation-for-adding-extensions\">\n<h3>Migrationsoperation för att lägga till tillägg<a class=\"heading-anchor\" href=\"#migration-operation-for-adding-extensions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du behöver lägga till en PostgreSQL-förlängning (som <code class=\"docutils literal notranslate\">hstore</code>, <code class=\"docutils literal notranslate\">postgis</code>, etc.) med hjälp av en migrering, använd <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/postgres/operations/#django.contrib.postgres.operations.CreateExtension\" title=\"django.contrib.postgres.operations.CreateExtension\"><code class=\"xref py py-class docutils literal notranslate\">CreateExtension</code></a> operation.</p>\n</section>\n<section id=\"server-side-cursors\">\n<span id=\"postgresql-server-side-cursors\"></span><h3>Markörer på serversidan<a class=\"heading-anchor\" href=\"#server-side-cursors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>När du använder <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet.iterator\" title=\"django.db.models.query.QuerySet.iterator\"><code class=\"xref py py-meth docutils literal notranslate\">QuerySet.iterator()</code></a> öppnar Django en <a class=\"reference external\" href=\"https://www.psycopg.org/psycopg3/docs/advanced/cursors.html#server-side-cursors\" title=\"(in psycopg)\"><span class=\"xref std std-ref\">server-side cursor</span></a>. Som standard antar PostgreSQL att endast de första 10% of resultaten av markörfrågor kommer att hämtas. Frågeplaneraren spenderar mindre tid på att planera frågan och börjar returnera resultat snabbare, men detta kan minska prestandan om mer än 10% of resultaten hämtas. PostgreSQL: s antaganden om antalet rader som hämtas för en markörfråga styrs med alternativet <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/runtime-config-query.html#GUC-CURSOR-TUPLE-FRACTION\">cursor_tuple_fraction</a>.</p>\n<section id=\"transaction-pooling-and-server-side-cursors\">\n<span id=\"transaction-pooling-server-side-cursors\"></span><h4>Transaktionspoolning och cursorer på serversidan<a class=\"heading-anchor\" href=\"#transaction-pooling-and-server-side-cursors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Om du använder en anslutningspooler i transaktionspoolningsläge (t.ex. <a class=\"reference external\" href=\"https://www.pgbouncer.org/\">PgBouncer</a>) måste du inaktivera markörer på serversidan för den anslutningen.</p>\n<p>Markörer på serversidan är lokala för en anslutning och förblir öppna i slutet av en transaktion när <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-DATABASE-AUTOCOMMIT\"><code class=\"xref std std-setting docutils literal notranslate\">AUTOCOMMIT</code></a> är <code class=\"docutils literal notranslate\">True</code>. En efterföljande transaktion kan försöka hämta fler resultat från en markör på serversidan. I transaktionspoolningsläget finns det ingen garanti för att efterföljande transaktioner kommer att använda samma anslutning. Om en annan anslutning används uppstår ett fel när transaktionen refererar till markören på serversidan, eftersom markörer på serversidan endast är tillgängliga i den anslutning där de skapades.</p>\n<p>En lösning är att inaktivera markörer på serversidan för en anslutning i <code class=\"xref std std-setting docutils literal notranslate\">DATABASER</code> genom att ställa in <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-DATABASE-DISABLE_SERVER_SIDE_CURSORS\"><code class=\"xref std std-setting docutils literal notranslate\">DISABLE_SERVER_SIDE_CURSORS</code></a> till <code class=\"docutils literal notranslate\">True</code>.</p>\n<p>Om du vill dra nytta av markörer på serversidan i transaktionspoolningsläge kan du konfigurera <a class=\"reference internal\" href=\"/sv/6.1/topics/db/multi-db/\"><span class=\"doc\">en annan anslutning till databasen</span></a> för att utföra frågor som använder markörer på serversidan. Den här anslutningen måste antingen vara direkt till databasen eller till en anslutningspooler i sessionspoolningsläge.</p>\n<p>Ett annat alternativ är att linda in varje <code class=\"docutils literal notranslate\">QuerySet</code> som använder markörer på serversidan i ett <a class=\"reference internal\" href=\"/sv/6.1/topics/db/transactions/#django.db.transaction.atomic\" title=\"django.db.transaction.atomic\"><code class=\"xref py py-func docutils literal notranslate\">atomic()</code></a>-block, eftersom det inaktiverar <code class=\"docutils literal notranslate\">autocommit</code> under transaktionens varaktighet. På så sätt kommer markören på serversidan bara att leva under transaktionens varaktighet.</p>\n</section>\n</section>\n<section id=\"manually-specifying-values-of-auto-incrementing-primary-keys\">\n<span id=\"manually-specified-autoincrement-pk\"></span><h3>Manuellt specificerade värden för primärnycklar med automatisk inkrementering<a class=\"heading-anchor\" href=\"#manually-specifying-values-of-auto-incrementing-primary-keys\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django använder PostgreSQLs identitetskolumner för att lagra automatiskt ökande primärnycklar. En identitetskolumn fylls med värden från en <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/sql-createsequence.html\">sekvens</a> som håller reda på nästa tillgängliga värde. Att manuellt tilldela ett värde till ett fält med automatisk ökning uppdaterar inte fältets sekvens, vilket senare kan orsaka en konflikt. Ett 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=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.models</span> <span class=\"kn\">import</span> User\n<span class=\"gp\">&gt;&gt;&gt; </span>User<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>username<span class=\"o\">=</span><span class=\"s2\">&quot;alice&quot;</span><span class=\"p\">,</span> pk<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;User: alice&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># The sequence hasn&#39;t been updated; its next value is 1.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>User<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>username<span class=\"o\">=</span><span class=\"s2\">&quot;bob&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">IntegrityError: duplicate key value violates unique constraint</span>\n<span class=\"go\">&quot;auth_user_pkey&quot; DETAIL:  Key (id)=(1) already exists.</span>\n</code></pre></div>\n<p>Om du behöver ange sådana värden ska du återställa sekvensen efteråt för att undvika att återanvända ett värde som redan finns i tabellen. Hanteringskommandot <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-sqlsequencereset\"><code class=\"xref std std-djadmin docutils literal notranslate\">sqlsequencereset</code></a> genererar SQL-satserna för att göra detta.</p>\n</section>\n<section id=\"test-database-templates\">\n<h3>Test av databasmallar<a class=\"heading-anchor\" href=\"#test-database-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Du kan använda inställningen <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-TEST_TEMPLATE\"><code class=\"xref std std-setting docutils literal notranslate\">TEST['TEMPLATE']</code></a> för att ange en <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/sql-createdatabase.html\">template</a> (t.ex. <code class=\"docutils literal notranslate\">'template0'</code>) från vilken en testdatabas ska skapas.</p>\n</section>\n<section id=\"speeding-up-test-execution-with-non-durable-settings\">\n<h3>Snabbare testkörning med icke-durabla inställningar<a class=\"heading-anchor\" href=\"#speeding-up-test-execution-with-non-durable-settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Du kan påskynda testkörningstiderna genom att <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/non-durability.html\">konfigurera PostgreSQL för att vara icke-durable</a>.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Detta är farligt: det gör din databas mer mottaglig för dataförlust eller korruption i händelse av en serverkrasch eller strömavbrott. Använd detta endast på en utvecklingsmaskin där du enkelt kan återställa hela innehållet i alla databaser i klustret.</p>\n</aside>\n</section>\n</section>\n<section id=\"mariadb-notes\">\n<span id=\"id4\"></span><h2>MariaDB anteckningar<a class=\"heading-anchor\" href=\"#mariadb-notes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django stöder MariaDB 10.11 och senare.</p>\n<p>För att använda MariaDB, använd MySQL-backend, som delas mellan de två. Se <a class=\"reference internal\" href=\"#mysql-notes\"><span class=\"std std-ref\">MySQL notes</span></a> för mer information.</p>\n</section>\n<section id=\"mysql-notes\">\n<span id=\"id5\"></span><h2>Anteckningar om MySQL<a class=\"heading-anchor\" href=\"#mysql-notes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"version-support\">\n<h3>Stöd för version<a class=\"heading-anchor\" href=\"#version-support\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django stöder MySQL 8.4 och senare.</p>\n<p>Djangos funktion <code class=\"docutils literal notranslate\">inspectdb</code> använder databasen <code class=\"docutils literal notranslate\">information_schema</code>, som innehåller detaljerade uppgifter om alla databasscheman.</p>\n<p>Django förväntar sig att databasen stöder Unicode (UTF-8-kodning) och delegerar till den uppgiften att upprätthålla transaktioner och referensintegritet. Det är viktigt att vara medveten om det faktum att de två sistnämnda faktiskt inte upprätthålls av MySQL när MyISAM-lagringsmotorn används, se nästa avsnitt.</p>\n</section>\n<section id=\"storage-engines\">\n<span id=\"mysql-storage-engines\"></span><h3>Lagringsmotorer<a class=\"heading-anchor\" href=\"#storage-engines\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>MySQL har flera <a class=\"reference internal\" href=\"#storage-engines\">lagringsmotorer</a>. Du kan ändra standardlagringsmotorn i serverkonfigurationen.</p>\n<p>MySQL:s standardlagringsmotor är <a class=\"reference external\" href=\"https://dev.mysql.com/doc/refman/en/innodb-storage-engine.html\">InnoDB</a>. Denna motor är helt transaktionell och stöder utländska nyckelreferenser. Det är det rekommenderade valet. InnoDB:s autoincrement-räknare går dock förlorad vid en MySQL-omstart eftersom den inte kommer ihåg värdet <code class=\"docutils literal notranslate\">AUTO_INCREMENT</code>, utan istället återskapar det som ”max(id)+1”. Detta kan resultera i en oavsiktlig återanvändning av <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.AutoField\" title=\"django.db.models.AutoField\"><code class=\"xref py py-class docutils literal notranslate\">AutoField</code></a>-värden.</p>\n<p>De största nackdelarna med <a class=\"reference external\" href=\"https://dev.mysql.com/doc/refman/en/myisam-storage-engine.html\">MyISAM</a> är att den inte stöder transaktioner eller upprätthåller begränsningar för utländska nycklar.</p>\n</section>\n<section id=\"mysql-db-api-drivers\">\n<span id=\"id7\"></span><h3>MySQL DB API-drivrutiner<a class=\"heading-anchor\" href=\"#mysql-db-api-drivers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>MySQL har ett par drivrutiner som implementerar Python Database API som beskrivs i <span class=\"target\" id=\"index-2\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0249/\"><strong>PEP 249</strong></a>:</p>\n<ul class=\"simple\">\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/mysqlclient/\">mysqlclient</a> är en inbyggd drivrutin. Det är <strong>det rekommenderade valet</strong>.</p></li>\n<li><p><a class=\"reference external\" href=\"https://dev.mysql.com/downloads/connector/python/\">MySQL Connector/Python</a> är en ren Python-drivrutin från Oracle som inte kräver MySQL-klientbiblioteket eller några Python-moduler utanför standardbiblioteket.</p></li>\n</ul>\n<p>Förutom en DB API-drivrutin behöver Django en adapter för att komma åt databasdrivrutinerna från sin ORM. Django tillhandahåller en adapter för mysqlclient medan MySQL Connector/Python innehåller <a class=\"reference external\" href=\"https://dev.mysql.com/doc/connector-python/en/connector-python-django-backend.html\">sin egen</a>.</p>\n<section id=\"mysqlclient\">\n<h4>mysqlclient<a class=\"heading-anchor\" href=\"#mysqlclient\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Django kräver <a class=\"reference internal\" href=\"#mysqlclient\">mysqlclient</a> 2.2.1 eller senare.</p>\n</section>\n<section id=\"id8\">\n<h4>MySQL Connector/Python<a class=\"heading-anchor\" href=\"#id8\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>MySQL Connector/Python är tillgänglig från <a class=\"reference external\" href=\"https://dev.mysql.com/downloads/connector/python/\">nedladdningssidan</a>. Django-adaptern är tillgänglig i version 1.1.X och senare. Den kanske inte stöder de senaste versionerna av Django.</p>\n</section>\n</section>\n<section id=\"time-zone-definitions\">\n<span id=\"mysql-time-zone-definitions\"></span><h3>Definitioner av tidszoner<a class=\"heading-anchor\" href=\"#time-zone-definitions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du planerar att använda Djangos <a class=\"reference internal\" href=\"/sv/6.1/topics/i18n/timezones/\"><span class=\"doc\">tidszonsstöd</span></a>, använd <a class=\"reference external\" href=\"https://dev.mysql.com/doc/refman/en/mysql-tzinfo-to-sql.html\">mysql_tzinfo_to_sql</a> för att ladda tidszonstabeller i MySQL-databasen. Detta behöver bara göras en gång för din MySQL-server, inte per databas.</p>\n</section>\n<section id=\"creating-your-database\">\n<h3>Skapa din databas<a class=\"heading-anchor\" href=\"#creating-your-database\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Du kan <a class=\"reference internal\" href=\"#creating-your-database\">skapa din databas</a> med hjälp av kommandoradsverktygen och denna SQL:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">CREATE</span> <span class=\"k\">DATABASE</span> <span class=\"o\">&lt;</span>dbname<span class=\"o\">&gt;</span> <span class=\"nb\">CHARACTER</span> <span class=\"k\">SET</span> utf8mb4<span class=\"p\">;</span>\n</code></pre></div>\n<p>Detta säkerställer att alla tabeller och kolumner använder UTF-8 som standard.</p>\n<section id=\"collation-settings\">\n<span id=\"mysql-collation\"></span><h4>Inställningar för sortering<a class=\"heading-anchor\" href=\"#collation-settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Kollationsinställningen för en kolumn styr den ordning i vilken data sorteras samt vilka strängar som jämförs som lika. Du kan ange parametern <code class=\"docutils literal notranslate\">db_collation</code> för att ställa in kolumnens kollationsnamn för <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.CharField.db_collation\" title=\"django.db.models.CharField.db_collation\"><code class=\"xref py py-attr docutils literal notranslate\">CharField</code></a> och <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.TextField.db_collation\" title=\"django.db.models.TextField.db_collation\"><code class=\"xref py py-attr docutils literal notranslate\">TextField</code></a>.</p>\n<p>Kollationen kan också ställas in på en databasomfattande nivå och per tabell. Detta är <a class=\"reference external\" href=\"https://dev.mysql.com/doc/refman/en/charset.html\">dokumenterat grundligt</a> i MySQL-dokumentationen. I sådana fall måste du ställa in sorteringen genom att direkt manipulera databasinställningarna eller tabellerna. Django tillhandahåller inte ett API för att ändra dem.</p>\n<p>Som standard, med en UTF-8-databas, kommer MySQL att använda kollationen <code class=\"docutils literal notranslate\">utf8mb4_0900_ai_ci</code>. Detta resulterar i att alla jämförelser av stränglikhet görs på ett <em>case-insensitive</em> sätt. Det innebär att <code class=\"docutils literal notranslate\">&quot;Fred&quot;</code> och <code class=\"docutils literal notranslate\">&quot;freD&quot;</code> betraktas som lika på databasnivå. Om du har en unik begränsning på ett fält skulle det vara olagligt att försöka infoga både <code class=\"docutils literal notranslate\">&quot;aa&quot;</code> och <code class=\"docutils literal notranslate\">&quot;AA&quot;</code> i samma kolumn, eftersom de jämförs som lika (och därmed icke-unika) med standardkollationen. Om du vill ha jämförelser med skiftlägeskänslighet i en viss kolumn eller tabell, ändrar du kolumnen eller tabellen så att den använder sorteringen <code class=\"docutils literal notranslate\">utf8mb4_0900_as_cs</code>.</p>\n<p>Observera att enligt <a class=\"reference external\" href=\"https://dev.mysql.com/doc/refman/en/charset-unicode-sets.html\">MySQL Unicode Character Sets</a> är jämförelser för `` utf8mb4_general_ci`` kollation snabbare, men något mindre korrekta än jämförelser för `` utf8mb4_unicode_ci``. Om detta är acceptabelt för ditt program bör du använda <code class=\"docutils literal notranslate\">utf8mb4_general_ci</code> eftersom det är snabbare. Om detta inte är acceptabelt (t.ex. om du behöver tysk ordboksordning), använd <code class=\"docutils literal notranslate\">utf8mb4_unicode_ci</code> eftersom det är mer exakt.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Modellformulären validerar unika fält på ett skiftlägeskänsligt sätt. Om man använder en kollationering som inte tar hänsyn till versaler kommer en formuläruppsättning med unika fältvärden som endast skiljer sig åt genom versaler att klara valideringen, men när man anropar <code class=\"docutils literal notranslate\">save()</code> kommer ett <code class=\"docutils literal notranslate\">IntegrityError</code> att uppstå.</p>\n</aside>\n</section>\n</section>\n<section id=\"connecting-to-the-database\">\n<h3>Anslutning till databasen<a class=\"heading-anchor\" href=\"#connecting-to-the-database\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Se <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/\"><span class=\"doc\">inställningsdokumentation</span></a>.</p>\n<p>Anslutningsinställningarna används i denna ordning:</p>\n<ol class=\"arabic simple\">\n<li><p><a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">OPTIONS</code></a>.</p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-NAME\"><code class=\"xref std std-setting docutils literal notranslate\">NAME</code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-USER\"><code class=\"xref std std-setting docutils literal notranslate\">USER</code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-PASSWORD\"><code class=\"xref std std-setting docutils literal notranslate\">PASSWORD</code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-HOST\"><code class=\"xref std std-setting docutils literal notranslate\">HOST</code></a>,\n<a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-PORT\"><code class=\"xref std std-setting docutils literal notranslate\">PORT</code></a></p></li>\n<li><p>MySQL-alternativfiler.</p></li>\n</ol>\n<p>Med andra ord, om du anger namnet på databasen i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">OPTIONS</code></a>, kommer detta att ha företräde framför <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-NAME\"><code class=\"xref std std-setting docutils literal notranslate\">NAME</code></a>, som skulle åsidosätta allt i en <a class=\"reference external\" href=\"https://dev.mysql.com/doc/refman/en/option-files.html\">MySQL-alternativfil</a>.</p>\n<p>Här är ett exempel på en konfiguration som använder en MySQL-alternativfil:</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=\"c1\"># settings.py</span>\nDATABASES <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;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;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;read_default_file&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;/path/to/my.cnf&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<div class=\"code-block\" data-language=\"ini\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Ini</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=\"Ini code\"><code><span class=\"c1\"># my.cnf</span>\n<span class=\"k\">[client]</span>\n<span class=\"na\">database</span> <span class=\"o\">=</span> <span class=\"s\">NAME</span>\n<span class=\"na\">user</span> <span class=\"o\">=</span> <span class=\"s\">USER</span>\n<span class=\"na\">password</span> <span class=\"o\">=</span> <span class=\"s\">PASSWORD</span>\n<span class=\"na\">default-character-set</span> <span class=\"o\">=</span> <span class=\"s\">utf8mb4</span>\n</code></pre></div>\n<p>Flera andra <a class=\"reference external\" href=\"https://mysqlclient.readthedocs.io/user_guide.html#functions-and-attributes\">MySQLdb-anslutningsalternativ</a> kan vara användbara, till exempel <code class=\"docutils literal notranslate\">ssl</code>, <code class=\"docutils literal notranslate\">init_command</code> och <code class=\"docutils literal notranslate\">sql_mode</code>.</p>\n<section id=\"setting-sql-mode\">\n<span id=\"mysql-sql-mode\"></span><h4>Ställa in <code class=\"docutils literal notranslate\">sql_mode</code><a class=\"heading-anchor\" href=\"#setting-sql-mode\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Standardvärdet för alternativet <code class=\"docutils literal notranslate\">sql_mode</code> innehåller <code class=\"docutils literal notranslate\">STRICT_TRANS_TABLES</code>. Det alternativet eskalerar varningar till fel när data trunkeras vid infogning, så Django rekommenderar starkt att du aktiverar ett strikt läge för MySQL för att förhindra dataförlust (antingen <code class=\"docutils literal notranslate\">STRICT_TRANS_TABLES</code> eller <code class=\"docutils literal notranslate\">STRICT_ALL_TABLES</code>).</p>\n<p>Om du behöver anpassa SQL-läget kan du ställa in variabeln <code class=\"docutils literal notranslate\">sql_mode</code> som andra MySQL-alternativ: antingen i en konfigurationsfil eller med posten <code class=\"docutils literal notranslate\">'init_command': &quot;SET sql_mode='STRICT_TRANS_TABLES'&quot;</code> i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">OPTIONS</code></a>-delen av din databaskonfiguration i <code class=\"xref std std-setting docutils literal notranslate\">DATABASER</code>.</p>\n</section>\n<section id=\"mysql-isolation-level\">\n<span id=\"id9\"></span><h4>Isolationsnivå<a class=\"heading-anchor\" href=\"#mysql-isolation-level\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>När samtidiga belastningar körs kan databastransaktioner från olika sessioner (t.ex. separata trådar som hanterar olika förfrågningar) interagera med varandra. Dessa interaktioner påverkas av varje sessions <a class=\"reference external\" href=\"https://dev.mysql.com/doc/refman/en/innodb-transaction-isolation-levels.html\">transaktionsisoleringsnivå</a>. Du kan ange en anslutnings isoleringsnivå med en <code class=\"docutils literal notranslate\">'isolation_level'</code>-post i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">OPTIONS</code></a>-delen av din databaskonfiguration i <code class=\"xref std std-setting docutils literal notranslate\">DATABASER</code>. Giltiga värden för den här posten är de fyra standardisoleringsnivåerna:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">'läsa utan åtagande'</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">'read committed'</code></p></li>\n<li><p>”upprepningsbar läsning</p></li>\n<li><p><code class=\"docutils literal notranslate\">'serializable'</code></p></li>\n</ul>\n<p>eller <code class=\"docutils literal notranslate\">None</code> för att använda serverns konfigurerade isoleringsnivå. Django fungerar dock bäst med och använder som standard read committed i stället för MySQL:s standard, repeatable read. Dataförlust är möjlig med repeterbar läsning. I synnerhet kan du se fall där <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet.get_or_create\" title=\"django.db.models.query.QuerySet.get_or_create\"><code class=\"xref py py-meth docutils literal notranslate\">get_or_create()</code></a> kommer att ge upphov till ett <a class=\"reference internal\" href=\"/sv/6.1/ref/exceptions/#django.db.IntegrityError\" title=\"django.db.IntegrityError\"><code class=\"xref py py-exc docutils literal notranslate\">IntegrityError</code></a> men objektet kommer inte att visas i ett efterföljande <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\">get()</code></a>-anrop.</p>\n</section>\n</section>\n<section id=\"creating-your-tables\">\n<h3>Skapa dina tabeller<a class=\"heading-anchor\" href=\"#creating-your-tables\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>När Django genererar schemat anges ingen lagringsmotor, så tabeller kommer att skapas med den standardlagringsmotor som din databasserver är konfigurerad för. Den enklaste lösningen är att ställa in din databasservers standardlagringsmotor till den önskade motorn.</p>\n<p>Om du använder en värdtjänst och inte kan ändra serverns standardlagringsmotor har du ett par alternativ.</p>\n<ul>\n<li><p>När tabellerna har skapats kan du köra en <code class=\"docutils literal notranslate\">ALTER TABLE</code>-sats för att konvertera en tabell till en ny lagringsmotor (t.ex. InnoDB):</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">ALTER</span> <span class=\"k\">TABLE</span> <span class=\"o\">&lt;</span>tablename<span class=\"o\">&gt;</span> ENGINE<span class=\"o\">=</span>INNODB<span class=\"p\">;</span>\n</code></pre></div>\n<p>Detta kan vara tråkigt om du har många tabeller.</p>\n</li>\n<li><p>Ett annat alternativ är att använda alternativet <code class=\"docutils literal notranslate\">init_command</code> för MySQLdb innan du skapar dina tabeller:</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=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;init_command&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;SET default_storage_engine=INNODB&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>Detta anger standardlagringsmotorn vid anslutning till databasen. När tabellerna har skapats bör du ta bort det här alternativet eftersom det lägger till en fråga som bara behövs när tabellerna skapas i varje databasanslutning.</p>\n</li>\n</ul>\n</section>\n<section id=\"table-names\">\n<h3>Tabellnamn<a class=\"heading-anchor\" href=\"#table-names\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Det finns <a class=\"reference external\" href=\"https://bugs.mysql.com/bug.php?id=48875\">kända problem</a> även i de senaste versionerna av MySQL som kan leda till att versalerna i ett tabellnamn ändras när vissa SQL-satser körs under vissa förhållanden. Det rekommenderas att du använder små bokstäver i tabellnamn, om möjligt, för att undvika problem som kan uppstå på grund av detta beteende. Django använder små bokstäver i tabellnamn när det automatiskt genererar tabellnamn från modeller, så detta är främst ett övervägande om du åsidosätter tabellnamnet via <a class=\"reference internal\" href=\"/sv/6.1/ref/models/options/#django.db.models.Options.db_table\" title=\"django.db.models.Options.db_table\"><code class=\"xref py py-class docutils literal notranslate\">db_table</code></a>-parametern.</p>\n</section>\n<section id=\"savepoints\">\n<h3>Spara poäng<a class=\"heading-anchor\" href=\"#savepoints\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Både Django ORM och MySQL (när de använder InnoDB <a class=\"reference internal\" href=\"#mysql-storage-engines\"><span class=\"std std-ref\">storage engine</span></a>) stöder databas <a class=\"reference internal\" href=\"/sv/6.1/topics/db/transactions/#topics-db-transactions-savepoints\"><span class=\"std std-ref\">savepoints</span></a>.</p>\n<p>Om du använder MyISAM-lagringsmotorn bör du vara medveten om att du kommer att få databasgenererade fel om du försöker använda <a class=\"reference internal\" href=\"/sv/6.1/topics/db/transactions/#topics-db-transactions-savepoints\"><span class=\"std std-ref\">savepoint-relaterade metoder i transaktions-API:n</span></a>. Anledningen till detta är att det är en dyr operation att upptäcka lagringsmotorn för en MySQL-databas/tabell, så det beslutades att det inte är värt att dynamiskt konvertera dessa metoder till no-op baserat på resultaten av sådan upptäckt.</p>\n</section>\n<section id=\"notes-on-specific-fields\">\n<h3>Anteckningar om specifika områden<a class=\"heading-anchor\" href=\"#notes-on-specific-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"character-fields\">\n<span id=\"mysql-character-fields\"></span><h4>Teckenfält<a class=\"heading-anchor\" href=\"#character-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Alla fält som lagras med kolumntyperna <code class=\"docutils literal notranslate\">VARCHAR</code> kan ha sin <code class=\"docutils literal notranslate\">max_length</code> begränsad till 255 tecken om du använder <code class=\"docutils literal notranslate\">unique=True</code> för fältet. Detta påverkar <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.SlugField\" title=\"django.db.models.SlugField\"><code class=\"xref py py-class docutils literal notranslate\">SlugField</code></a>. Se <a class=\"reference external\" href=\"https://dev.mysql.com/doc/refman/en/create-index.html#create-index-column-prefixes\">MySQL-dokumentationen</a> för mer information.</p>\n</section>\n<section id=\"textfield-limitations\">\n<h4>begränsningar för <code class=\"docutils literal notranslate\">TextField</code><a class=\"heading-anchor\" href=\"#textfield-limitations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>MySQL kan endast indexera de första N tecknen i en <code class=\"docutils literal notranslate\">BLOB</code> eller <code class=\"docutils literal notranslate\">TEXT</code>-kolumn. Eftersom <code class=\"docutils literal notranslate\">TextField</code> inte har en definierad längd kan du inte markera den som <code class=\"docutils literal notranslate\">unique=True</code>. MySQL kommer att rapportera: ”BLOB/TEXT-kolumn ’&lt;db_column&gt;’ används i nyckelspecifikation utan en nyckellängd”.</p>\n</section>\n<section id=\"fractional-seconds-support-for-time-and-datetime-fields\">\n<span id=\"mysql-fractional-seconds\"></span><h4>Stöd för bråkdelar av sekunder för Time- och DateTime-fält<a class=\"heading-anchor\" href=\"#fractional-seconds-support-for-time-and-datetime-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>MySQL kan lagra bråkdelar av sekunder, förutsatt att kolumndefinitionen innehåller en bråkdelsindikation (t.ex. <code class=\"docutils literal notranslate\">DATETIME(6)</code>).</p>\n<p>Django kommer inte att uppgradera befintliga kolumner för att inkludera bråkdelar av sekunder om databasservern stöder det. Om du vill aktivera dem i en befintlig databas är det upp till dig att antingen manuellt uppdatera kolumnen i måldatabasen genom att köra ett kommando som:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">ALTER</span> <span class=\"k\">TABLE</span> <span class=\"o\">`</span>your_table<span class=\"o\">`</span> <span class=\"k\">MODIFY</span> <span class=\"o\">`</span>your_datetime_column<span class=\"o\">`</span> DATETIME<span class=\"p\">(</span><span class=\"mi\">6</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>eller använda en <a class=\"reference internal\" href=\"/sv/6.1/ref/migration-operations/#django.db.migrations.operations.RunSQL\" title=\"django.db.migrations.operations.RunSQL\"><code class=\"xref py py-class docutils literal notranslate\">RunSQL</code></a> operation i en <a class=\"reference internal\" href=\"/sv/6.1/topics/migrations/#data-migrations\"><span class=\"std std-ref\">datamigrering</span></a>.</p>\n</section>\n<section id=\"timestamp-columns\">\n<h4><code class=\"docutils literal notranslate\">TIMESTAMP</code> kolumner<a class=\"heading-anchor\" href=\"#timestamp-columns\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Om du använder en äldre databas som innehåller <code class=\"docutils literal notranslate\">TIMESTAMP</code>-kolumner måste du ställa in <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\">USE_TZ = False</code></a> för att undvika datakorruption. <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-inspectdb\"><code class=\"xref std std-djadmin docutils literal notranslate\">inspectdb</code></a> mappar dessa kolumner till <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\">DateTimeField</code></a> och om du aktiverar tidszonsstöd kommer både MySQL och Django att försöka konvertera värdena från UTC till lokal tid.</p>\n</section>\n</section>\n<section id=\"row-locking-with-queryset-select-for-update\">\n<h3>Radlåsning med <code class=\"docutils literal notranslate\">QuerySet.select_for_update()</code><a class=\"heading-anchor\" href=\"#row-locking-with-queryset-select-for-update\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>MySQL och MariaDB stöder inte vissa alternativ till <code class=\"docutils literal notranslate\">SELECT ... FOR UPDATE</code>-satsen. Om <code class=\"docutils literal notranslate\">select_for_update()</code> används med ett alternativ som inte stöds, kommer ett <a class=\"reference internal\" href=\"/sv/6.1/ref/exceptions/#django.db.NotSupportedError\" title=\"django.db.NotSupportedError\"><code class=\"xref py py-exc docutils literal notranslate\">NotSupportedError</code></a> att uppstå.</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>Alternativ</p></th>\n<th class=\"head\"><p>MariaDB</p></th>\n<th class=\"head\"><p>MySQL</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">HOPPET LÅST</code></p></td>\n<td><p>X</p></td>\n<td><p>X</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">NOWAIT</code></p></td>\n<td><p>X</p></td>\n<td><p>X</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">OF</code></p></td>\n<td></td>\n<td><p>X</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">NO KEY</code></p></td>\n<td></td>\n<td></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>När du använder <code class=\"docutils literal notranslate\">select_for_update()</code> på MySQL, se till att du filtrerar en frågeuppsättning mot åtminstone en uppsättning fält som ingår i unika begränsningar eller endast mot fält som täcks av index. Annars kommer ett exklusivt skrivlås att förvärvas över hela tabellen under hela transaktionens varaktighet.</p>\n</section>\n<section id=\"automatic-typecasting-can-cause-unexpected-results\">\n<h3>Automatisk typcasting kan leda till oväntade resultat<a class=\"heading-anchor\" href=\"#automatic-typecasting-can-cause-unexpected-results\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>När du utför en fråga på en strängtyp, men med ett heltalsvärde, kommer MySQL att tvinga typerna för alla värden i tabellen till ett heltal innan jämförelsen utförs. Om din tabell innehåller värdena <code class=\"docutils literal notranslate\">'abc'</code>, <code class=\"docutils literal notranslate\">'def'</code> och du frågar efter <code class=\"docutils literal notranslate\">WHERE mycolumn=0</code>, kommer båda raderna att matcha. På samma sätt kommer <code class=\"docutils literal notranslate\">WHERE mycolumn=1</code> att matcha värdet <code class=\"docutils literal notranslate\">'abc1'</code>. Därför kommer fält av strängtyp som ingår i Django alltid att kasta värdet till en sträng innan det används i en fråga.</p>\n<p>Om du implementerar anpassade modellfält som ärver från <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\">Field</code></a> direkt, åsidosätter <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.Field.get_prep_value\" title=\"django.db.models.Field.get_prep_value\"><code class=\"xref py py-meth docutils literal notranslate\">get_prep_value()</code></a> eller använder <a class=\"reference internal\" href=\"/sv/6.1/ref/models/expressions/#django.db.models.expressions.RawSQL\" title=\"django.db.models.expressions.RawSQL\"><code class=\"xref py py-class docutils literal notranslate\">RawSQL</code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet.extra\" title=\"django.db.models.query.QuerySet.extra\"><code class=\"xref py py-meth docutils literal notranslate\">extra()</code></a>, eller <a class=\"reference internal\" href=\"/sv/6.1/topics/db/sql/#django.db.models.Manager.raw\" title=\"django.db.models.Manager.raw\"><code class=\"xref py py-meth docutils literal notranslate\">raw()</code></a>, bör du se till att du utför lämplig typecasting.</p>\n</section>\n</section>\n<section id=\"sqlite-notes\">\n<span id=\"id10\"></span><h2>Anteckningar om SQLite<a class=\"heading-anchor\" href=\"#sqlite-notes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django stöder SQLite 3.37.0 och senare.</p>\n<p><a class=\"reference external\" href=\"https://www.sqlite.org/\">SQLite</a> är ett utmärkt utvecklingsalternativ för applikationer som huvudsakligen är skrivskyddade eller som kräver en mindre installation. Som med alla databasservrar finns det dock vissa skillnader som är specifika för SQLite som du bör vara medveten om.</p>\n<section id=\"substring-matching-and-case-sensitivity\">\n<span id=\"sqlite-string-matching\"></span><h3>Matchning av substrängar och skiftlägeskänslighet<a class=\"heading-anchor\" href=\"#substring-matching-and-case-sensitivity\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>För alla SQLite-versioner finns det ett något kontraintuitivt beteende när man försöker matcha vissa typer av strängar. Det utlöses när filtren <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-iexact\"><code class=\"xref std std-lookup docutils literal notranslate\">iexact</code></a> eller <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-contains\"><code class=\"xref std std-lookup docutils literal notranslate\">contains</code></a> används i frågeuppsättningar. Beteendet delas upp i två fall:</p>\n<p>1. For substring matching, all matches are done case-insensitively. That is a\nfilter such as <code class=\"docutils literal notranslate\">filter(name__contains=&quot;aa&quot;)</code> will match a name of <code class=\"docutils literal notranslate\">&quot;Aabb&quot;</code>.</p>\n<p>2. For strings containing characters outside the ASCII range, all exact string\nmatches are performed case-sensitively, even when the case-insensitive options\nare passed into the query. So the <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-iexact\"><code class=\"xref std std-lookup docutils literal notranslate\">iexact</code></a> filter will behave exactly\nthe same as the <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-exact\"><code class=\"xref std std-lookup docutils literal notranslate\">exact</code></a> filter in these cases.</p>\n<p>Några möjliga lösningar för detta finns <a class=\"reference external\" href=\"https://www.sqlite.org/faq.html#q18\">dokumenterade på sqlite.org</a>, men de används inte av standard SQLite-backend i Django, eftersom det skulle vara ganska svårt att göra dem robusta. Således exponerar Django standard SQLite-beteendet och du bör vara medveten om detta när du gör skiftlägeskänslig eller delsträngsfiltrering.</p>\n</section>\n<section id=\"decimal-handling\">\n<span id=\"sqlite-decimal-handling\"></span><h3>Decimalhantering<a class=\"heading-anchor\" href=\"#decimal-handling\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>SQLite har ingen riktig decimal intern typ. Decimalvärden konverteras internt till datatypen <code class=\"docutils literal notranslate\">REAL</code> (8-byte IEEE flyttalsnummer), vilket förklaras i <a class=\"reference external\" href=\"https://www.sqlite.org/datatype3.html#storage_classes_and_datatypes\">SQLite datatypes documentation</a>, så de stöder inte korrekt avrundad decimal flyttalsaritmetik.</p>\n</section>\n<section id=\"database-is-locked-errors\">\n<h3>felmeddelandet ”Databasen är låst”<a class=\"heading-anchor\" href=\"#database-is-locked-errors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>SQLite är tänkt att vara en lättviktig databas och kan därför inte stödja en hög nivå av samtidighet. <code class=\"docutils literal notranslate\">OperationalError: database is locked</code>-fel indikerar att din applikation upplever mer samtidighet än vad <code class=\"docutils literal notranslate\">sqlite</code> kan hantera i standardkonfigurationen. Det här felet innebär att en tråd eller process har ett exklusivt lås på databasanslutningen och att en annan tråd tidsavbröts i väntan på att låset skulle frigöras.</p>\n<p>Pythons SQLite-wrapper har ett standardvärde för timeout som avgör hur länge den andra tråden får vänta på låset innan det tar slut och felet <code class=\"docutils literal notranslate\">OperationalError: database is locked</code> uppstår.</p>\n<p>Om du får det här felet kan du lösa det genom att:</p>\n<ul>\n<li><p>Byta till en annan databasbackend. Vid en viss punkt blir SQLite för ”lite” för verkliga applikationer, och den här typen av samtidighetsfel indikerar att du har nått den punkten.</p></li>\n<li><p>Skriva om din kod för att minska samtidighet och säkerställa att databastransaktioner är kortlivade.</p></li>\n<li><p>Öka standardvärdet för timeout genom att ställa in databasalternativet <code class=\"docutils literal notranslate\">timeout</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=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"s2\">&quot;timeout&quot;</span><span class=\"p\">:</span> <span class=\"mi\">20</span><span class=\"p\">,</span>\n    <span class=\"c1\"># ...</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>Detta gör att SQLite väntar lite längre innan den ger felmeddelandet ”databasen är låst”, men det gör egentligen ingenting för att lösa dem.</p>\n</li>\n</ul>\n<section id=\"transactions-behavior\">\n<span id=\"sqlite-transaction-behavior\"></span><h4>Transaktionsbeteende<a class=\"heading-anchor\" href=\"#transactions-behavior\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>SQLite stöder tre transaktionslägen: <code class=\"docutils literal notranslate\">DEFERRED</code>, <code class=\"docutils literal notranslate\">IMMEDIATE</code> och <code class=\"docutils literal notranslate\">EXCLUSIVE</code>.</p>\n<p>Standardvärdet är <code class=\"docutils literal notranslate\">DEFERRED</code>. Om du behöver använda ett annat läge anger du det i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">OPTIONS</code></a>-delen av din databaskonfiguration i <code class=\"xref std std-setting docutils literal notranslate\">DATABASER</code>, till exempel:</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=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"s2\">&quot;transaction_mode&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;IMMEDIATE&quot;</span><span class=\"p\">,</span>\n    <span class=\"c1\"># ...</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>Om du vill vara säker på att dina transaktioner väntar till <code class=\"docutils literal notranslate\">timeout</code> innan du meddelar ”Databasen är låst”, ändrar du transaktionsläget till <code class=\"docutils literal notranslate\">IMMEDIATE</code>.</p>\n<p>För bästa prestanda med <code class=\"docutils literal notranslate\">IMMEDIATE</code> och <code class=\"docutils literal notranslate\">EXCLUSIVE</code> bör transaktionerna vara så korta som möjligt. Detta kan vara svårt att garantera för alla dina vyer, så användningen av <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-DATABASE-ATOMIC_REQUESTS\"><code class=\"xref std std-setting docutils literal notranslate\">ATOMIC_REQUESTS</code></a> avråds i detta fall.</p>\n<p>För mer information se <a class=\"reference external\" href=\"https://www.sqlite.org/lang_transaction.html#deferred_immediate_and_exclusive_transactions\">Transaktioner i SQLite</a>.</p>\n</section>\n</section>\n<section id=\"queryset-select-for-update-not-supported\">\n<h3><code class=\"docutils literal notranslate\">QuerySet.select_for_update()</code> stöds inte<a class=\"heading-anchor\" href=\"#queryset-select-for-update-not-supported\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>SQLite har inte stöd för syntaxen <code class=\"docutils literal notranslate\">SELECT ... FOR UPDATE</code>. Att anropa den kommer inte att ha någon effekt.</p>\n</section>\n<section id=\"isolation-when-using-queryset-iterator\">\n<span id=\"sqlite-isolation\"></span><h3>Isolering vid användning av <code class=\"docutils literal notranslate\">QuerySet.iterator()</code><a class=\"heading-anchor\" href=\"#isolation-when-using-queryset-iterator\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Det finns särskilda överväganden som beskrivs i <a class=\"reference external\" href=\"https://www.sqlite.org/isolation.html\">Isolation In SQLite</a> när man ändrar en tabell medan man itererar över den med <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet.iterator\" title=\"django.db.models.query.QuerySet.iterator\"><code class=\"xref py py-meth docutils literal notranslate\">QuerySet.iterator()</code></a>. Om en rad läggs till, ändras eller tas bort inom loopen kan den raden visas eller inte visas, eller visas två gånger, i efterföljande resultat som hämtas från iteratorn. Din kod måste hantera detta.</p>\n</section>\n<section id=\"enabling-json1-extension-on-sqlite\">\n<span id=\"sqlite-json1\"></span><h3>Aktivera JSON1-tillägget på SQLite<a class=\"heading-anchor\" href=\"#enabling-json1-extension-on-sqlite\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>För att använda <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.JSONField\" title=\"django.db.models.JSONField\"><code class=\"xref py py-class docutils literal notranslate\">JSONField</code></a> med SQLite behöver du aktivera tillägget <a class=\"reference external\" href=\"https://www.sqlite.org/json1.html\">JSON1</a> i Pythons <a class=\"reference external\" href=\"https://docs.python.org/3/library/sqlite3.html#module-sqlite3\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\">sqlite3</code></a>-bibliotek. Om tillägget inte är aktiverat i installationen utlöses ett systemfel (<code class=\"docutils literal notranslate\">fields.E180</code>).</p>\n<p>För att aktivera JSON1-tillägget kan du följa instruktionerna på wikisidan.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>JSON1-tillägget är aktiverat som standard i SQLite 3.38+.</p>\n</aside>\n</section>\n<section id=\"setting-pragma-options\">\n<span id=\"sqlite-init-command\"></span><h3>Ställa in pragma-alternativ<a class=\"heading-anchor\" href=\"#setting-pragma-options\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference external\" href=\"https://www.sqlite.org/pragma.html\">Pragma options</a> kan ställas in vid anslutning med hjälp av <code class=\"docutils literal notranslate\">init_command</code> i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">OPTIONS</code></a>-delen av din databaskonfiguration i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\">DATABASES</code></a>. I exemplet nedan visas hur man aktiverar extra hållbarhet för synkrona skrivningar och ändrar <code class=\"docutils literal notranslate\">cache_size</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>DATABASES <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.db.backends.sqlite3&quot;</span><span class=\"p\">,</span>\n        <span class=\"c1\"># ...</span>\n        <span class=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;init_command&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;PRAGMA synchronous=3; PRAGMA cache_size=2000;&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"oracle-notes\">\n<span id=\"id12\"></span><h2>Oracle anteckningar<a class=\"heading-anchor\" href=\"#oracle-notes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django stöder <a class=\"reference external\" href=\"https://www.oracle.com/\">Oracle Database Server</a> version 19c och senare. Version 2.3.0 eller högre av Python-drivrutinen <a class=\"reference external\" href=\"https://oracle.github.io/python-oracledb/\">oracledb</a> krävs.</p>\n<p>För att kommandot <code class=\"docutils literal notranslate\">python manage.py migrate</code> ska fungera måste din Oracle-databasanvändare ha behörighet att köra följande kommandon:</p>\n<ul class=\"simple\">\n<li><p>SKAPA TABELL</p></li>\n<li><p>SKAPA SEKVENS</p></li>\n<li><p>SKAPA PROCEDUR</p></li>\n<li><p>SKAPA TRIGGER</p></li>\n</ul>\n<p>För att köra ett projekts testsvit behöver användaren vanligtvis dessa <em>ytterligare</em> behörigheter:</p>\n<ul class=\"simple\">\n<li><p>SKAPA ANVÄNDARE</p></li>\n<li><p>ÄNDRAR ANVÄNDARE</p></li>\n<li><p>DROP ANVÄNDARE</p></li>\n<li><p>SKAPA TABLESPACE</p></li>\n<li><p>SLÄPP TABLESPACE</p></li>\n<li><p>SKAPA SESSION MED ADMINISTRATÖRSALTERNATIV</p></li>\n<li><p>SKAPA TABELL MED ADMINISTRATÖRSALTERNATIV</p></li>\n<li><p>SKAPA SEKVENS MED ADMINISTRATÖRSALTERNATIV</p></li>\n<li><p>SKAPA PROCEDUR MED ADMINISTRATÖRSALTERNATIV</p></li>\n<li><p>SKAPA TRIGGER MED ADMINISTRATÖRSALTERNATIV</p></li>\n</ul>\n<p>Även om rollen <code class=\"docutils literal notranslate\">RESOURCE</code> har de nödvändiga behörigheterna <code class=\"docutils literal notranslate\">CREATE TABLE</code>, <code class=\"docutils literal notranslate\">CREATE SEQUENCE</code>, <code class=\"docutils literal notranslate\">CREATE PROCEDURE</code> och <code class=\"docutils literal notranslate\">CREATE TRIGGER</code> och en användare som tilldelats <code class=\"docutils literal notranslate\">RESOURCE WITH ADMIN OPTION</code> kan tilldela <code class=\"docutils literal notranslate\">RESOURCE</code>, kan en sådan användare inte tilldela de enskilda behörigheterna (t.ex.t.ex. <code class=\"docutils literal notranslate\">CREATE TABLE</code>), och därför är <code class=\"docutils literal notranslate\">RESOURCE WITH ADMIN OPTION</code> vanligtvis inte tillräckligt för att köra tester.</p>\n<p>Vissa testsviter skapar också vyer eller materialiserade vyer; för att köra dessa behöver användaren också behörigheterna <code class=\"docutils literal notranslate\">CREATE VIEW WITH ADMIN OPTION</code> och <code class=\"docutils literal notranslate\">CREATE MATERIALIZED VIEW WITH ADMIN OPTION</code>. I synnerhet behövs detta för Djangos egen testsvit.</p>\n<p>Alla dessa behörigheter ingår i DBA-rollen, som är lämplig att använda i en privat utvecklares databas.</p>\n<p>Oracle-databasens backend använder paketen <code class=\"docutils literal notranslate\">SYS.DBMS_LOB</code> och <code class=\"docutils literal notranslate\">SYS.DBMS_RANDOM</code>, så din användare kommer att behöva exekveringsbehörighet för det. Det är normalt tillgängligt för alla användare som standard, men om det inte är det måste du ge behörigheter på följande sätt:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">GRANT</span> <span class=\"k\">EXECUTE</span> <span class=\"k\">ON</span> SYS<span class=\"p\">.</span>DBMS_LOB <span class=\"k\">TO</span> <span class=\"k\">user</span><span class=\"p\">;</span>\n<span class=\"k\">GRANT</span> <span class=\"k\">EXECUTE</span> <span class=\"k\">ON</span> SYS<span class=\"p\">.</span>DBMS_RANDOM <span class=\"k\">TO</span> <span class=\"k\">user</span><span class=\"p\">;</span>\n</code></pre></div>\n<section id=\"id13\">\n<h3>Anslutning till databasen<a class=\"heading-anchor\" href=\"#id13\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du vill ansluta med hjälp av servicenamnet för din Oracle-databas ska filen <code class=\"docutils literal notranslate\">settings.py</code> se ut ungefär 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>DATABASES <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.db.backends.oracle&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;xe&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;USER&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;a_user&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;PASSWORD&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;a_password&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;HOST&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;PORT&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>I det här fallet bör du lämna både <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-HOST\"><code class=\"xref std std-setting docutils literal notranslate\">HOST</code></a> och <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-PORT\"><code class=\"xref std std-setting docutils literal notranslate\">PORT</code></a> tomma. Om du däremot inte använder filen <code class=\"docutils literal notranslate\">tnsnames.ora</code> eller någon liknande namngivningsmetod och vill ansluta med hjälp av SID (”xe” i det här exemplet), fyller du i både <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-HOST\"><code class=\"xref std std-setting docutils literal notranslate\">HOST</code></a> och <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-PORT\"><code class=\"xref std std-setting docutils literal notranslate\">PORT</code></a> på följande sätt:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>DATABASES <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.db.backends.oracle&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;xe&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;USER&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;a_user&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;PASSWORD&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;a_password&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;HOST&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;dbprod01ned.mycompany.com&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;PORT&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;1540&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>Du bör antingen ange både <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-HOST\"><code class=\"xref std std-setting docutils literal notranslate\">HOST</code></a> och <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-PORT\"><code class=\"xref std std-setting docutils literal notranslate\">PORT</code></a>, eller lämna båda som tomma strängar. Django kommer att använda en annan connect descriptor beroende på detta val.</p>\n<section id=\"full-dsn-and-easy-connect\">\n<h4>Fullständig DSN och Easy Connect<a class=\"heading-anchor\" href=\"#full-dsn-and-easy-connect\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>En fullständig DSN- eller Easy Connect-sträng kan användas i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-NAME\"><code class=\"xref std std-setting docutils literal notranslate\">NAME</code></a> om både <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-HOST\"><code class=\"xref std std-setting docutils literal notranslate\">HOST</code></a> och <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-PORT\"><code class=\"xref std std-setting docutils literal notranslate\">PORT</code></a> är tomma. Det här formatet krävs när du använder RAC eller pluggbara databaser utan <code class=\"docutils literal notranslate\">tnsnames.ora</code>, till exempel.</p>\n<p>Exempel på en Easy Connect-sträng:</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=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;localhost:1521/orclpdb1&quot;</span>\n</code></pre></div>\n<p>Exempel på en fullständig DSN-sträng:</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=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"p\">(</span>\n    <span class=\"s2\">&quot;(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))&quot;</span>\n    <span class=\"s2\">&quot;(CONNECT_DATA=(SERVICE_NAME=orclpdb1)))&quot;</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"oracle-pool\">\n<span id=\"id14\"></span><h3>Anslutningspool<a class=\"heading-anchor\" href=\"#oracle-pool\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>För att använda en anslutningspool med <a class=\"reference external\" href=\"https://oracle.github.io/python-oracledb/\">oracledb</a>, sätt <code class=\"docutils literal notranslate\">&quot;pool&quot;</code> till <code class=\"docutils literal notranslate\">True</code> i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">OPTIONS</code></a>-delen av din databaskonfiguration. Detta använder drivrutinens <a class=\"reference external\" href=\"https://python-oracledb.readthedocs.io/en/latest/user_guide/connection_handling.html#connection-pooling\">create_pool()</a> standardvärden:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>DATABASES <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.db.backends.oracle&quot;</span><span class=\"p\">,</span>\n        <span class=\"c1\"># ...</span>\n        <span class=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;pool&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>För att skicka anpassade parametrar till drivrutinens funktion <a class=\"reference external\" href=\"https://python-oracledb.readthedocs.io/en/latest/user_guide/connection_handling.html#connection-pooling\">create_pool()</a> kan du alternativt ange att <code class=\"docutils literal notranslate\">&quot;pool&quot;</code> ska vara en dict:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>DATABASES <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.db.backends.oracle&quot;</span><span class=\"p\">,</span>\n        <span class=\"c1\"># ...</span>\n        <span class=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;pool&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;min&quot;</span><span class=\"p\">:</span> <span class=\"mi\">1</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;max&quot;</span><span class=\"p\">:</span> <span class=\"mi\">10</span><span class=\"p\">,</span>\n                <span class=\"c1\"># ...</span>\n            <span class=\"p\">}</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n</section>\n<section id=\"insert-returning-into\">\n<h3>INFOGA … ÅTERVÄNDANDE TILL<a class=\"heading-anchor\" href=\"#insert-returning-into\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Som standard använder Oracle-backenden en <code class=\"docutils literal notranslate\">RETURNING INTO</code>-sats för att effektivt hämta värdet för ett <code class=\"docutils literal notranslate\">AutoField</code> när nya rader infogas. Detta beteende kan resultera i ett <code class=\"docutils literal notranslate\">DatabaseError</code> i vissa ovanliga konfigurationer, till exempel vid infogning i en fjärrtabell eller i en vy med en <code class=\"docutils literal notranslate\">INSTEAD OF</code>-utlösare. Satsen <code class=\"docutils literal notranslate\">RETURNING INTO</code> kan inaktiveras genom att ange alternativet <code class=\"docutils literal notranslate\">use_returning_into</code> i databaskonfigurationen till <code class=\"docutils literal notranslate\">False</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=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;use_returning_into&quot;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>I det här fallet kommer Oracle-backend att använda en separat <code class=\"docutils literal notranslate\">SELECT</code>-fråga för att hämta <code class=\"docutils literal notranslate\">AutoField</code>-värden.</p>\n</section>\n<section id=\"naming-issues\">\n<h3>Problem med namngivning<a class=\"heading-anchor\" href=\"#naming-issues\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Oracle har en begränsning på 30 tecken för namnlängden. För att tillgodose detta trunkerar backend databasidentifierare så att de passar och ersätter de sista fyra tecknen i det trunkerade namnet med ett upprepningsbart MD5-hashvärde. Dessutom ändrar backend databasidentifierare till enbart versaler.</p>\n<p>För att förhindra dessa omvandlingar (detta krävs vanligtvis endast när man arbetar med äldre databaser eller har åtkomst till tabeller som tillhör andra användare), använd ett citerat namn som värde för <code class=\"docutils literal notranslate\">db_table</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=\"k\">class</span> <span class=\"nc\">LegacyModel</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        db_table <span class=\"o\">=</span> <span class=\"s1\">&#39;&quot;name_left_in_lowercase&quot;&#39;</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">ForeignModel</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        db_table <span class=\"o\">=</span> <span class=\"s1\">&#39;&quot;OTHER_USER&quot;.&quot;NAME_ONLY_SEEMS_OVER_30&quot;&#39;</span>\n</code></pre></div>\n<p>Citerade namn kan också användas med Djangos andra stödda databasbackends; med undantag för Oracle har citaten dock ingen effekt.</p>\n<p>När <code class=\"docutils literal notranslate\">migrate</code> körs kan ett fel <code class=\"docutils literal notranslate\">ORA-06552</code> uppstå om vissa Oracle-nyckelord används som namn på ett modellfält eller som värde för alternativet <code class=\"docutils literal notranslate\">db_column</code>. Django citerar alla identifierare som används i frågor för att förhindra de flesta sådana problem, men felet kan ändå uppstå när en Oracle-datatyp används som kolumnnamn. Var särskilt noga med att undvika namnen <code class=\"docutils literal notranslate\">date</code>, <code class=\"docutils literal notranslate\">timestamp</code>, <code class=\"docutils literal notranslate\">number</code> och <code class=\"docutils literal notranslate\">float</code> som fältnamn.</p>\n</section>\n<section id=\"null-and-empty-strings\">\n<span id=\"oracle-null-empty-strings\"></span><h3>NULL och tomma strängar<a class=\"heading-anchor\" href=\"#null-and-empty-strings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django föredrar i allmänhet att använda den tomma strängen (<code class=\"docutils literal notranslate\">''</code>) i stället för <code class=\"docutils literal notranslate\">NULL</code>, men Oracle behandlar båda identiskt. För att komma runt detta ignorerar Oracle-backend ett explicit <code class=\"docutils literal notranslate\">null</code>-alternativ på fält som har den tomma strängen som ett möjligt värde och genererar DDL som om <code class=\"docutils literal notranslate\">null=True</code>. Vid hämtning från databasen antas det att ett <code class=\"docutils literal notranslate\">NULL</code>-värde i ett av dessa fält verkligen betyder den tomma strängen, och data konverteras tyst för att återspegla detta antagande.</p>\n</section>\n<section id=\"id15\">\n<h3>begränsningar för <code class=\"docutils literal notranslate\">TextField</code><a class=\"heading-anchor\" href=\"#id15\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Oracles backend lagrar varje <code class=\"docutils literal notranslate\">TextField</code> som en <code class=\"docutils literal notranslate\">NCLOB</code>-kolumn. Oracle inför vissa begränsningar för användningen av sådana LOB-kolumner i allmänhet:</p>\n<ul class=\"simple\">\n<li><p>LOB-kolumner får inte användas som primärnycklar.</p></li>\n<li><p>LOB-kolumner får inte användas i index.</p></li>\n<li><p>LOB-kolumner får inte användas i en <code class=\"docutils literal notranslate\">SELECT DISTINCT</code>-lista. Detta innebär att försök att använda metoden <code class=\"docutils literal notranslate\">QuerySet.distinct</code> på en modell som innehåller <code class=\"docutils literal notranslate\">TextField</code>-kolumner kommer att resultera i ett <code class=\"docutils literal notranslate\">ORA-00932</code>-fel när den körs mot Oracle. Som en lösning kan du använda metoden <code class=\"docutils literal notranslate\">QuerySet.defer</code> tillsammans med <code class=\"docutils literal notranslate\">distinct()</code> för att förhindra att <code class=\"docutils literal notranslate\">TextField</code>-kolumner inkluderas i listan <code class=\"docutils literal notranslate\">SELECT DISTINCT</code>.</p></li>\n</ul>\n</section>\n</section>\n<section id=\"subclassing-the-built-in-database-backends\">\n<span id=\"subclassing-database-backends\"></span><h2>Underklassning av de inbyggda databasbackends<a class=\"heading-anchor\" href=\"#subclassing-the-built-in-database-backends\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django levereras med inbyggda databasbackendar. Du kan underklassa en befintlig databasbackend för att ändra dess beteende, funktioner eller konfiguration.</p>\n<p>Tänk dig till exempel att du behöver ändra en enda databasfunktion. Först måste du skapa en ny katalog med en <code class=\"docutils literal notranslate\">base</code>-modul i den. Ett exempel:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>mysite/\n    ...\n    mydbengine/\n        __init__.py\n        base.py\n</code></pre></div>\n<p>Modulen <code class=\"docutils literal notranslate\">base.py</code> måste innehålla en klass med namnet <code class=\"docutils literal notranslate\">DatabaseWrapper</code> som underklassar en befintlig motor från modulen <code class=\"docutils literal notranslate\">django.db.backends</code>. Här är ett exempel på underklassning av PostgreSQL-motorn för att ändra en funktionsklass <code class=\"docutils literal notranslate\">allows_group_by_selected_pks_on_model</code>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">mysite/mydbengine/base.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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 code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db.backends.postgresql</span> <span class=\"kn\">import</span> base<span class=\"p\">,</span> features\n\n\n<span class=\"k\">class</span> <span class=\"nc\">DatabaseFeatures</span><span class=\"p\">(</span>features<span class=\"o\">.</span>DatabaseFeatures<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">allows_group_by_selected_pks_on_model</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> model<span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"kc\">True</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">DatabaseWrapper</span><span class=\"p\">(</span>base<span class=\"o\">.</span>DatabaseWrapper<span class=\"p\">):</span>\n    features_class <span class=\"o\">=</span> DatabaseFeatures\n</code></pre></figure>\n<p>Slutligen måste du ange en <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-DATABASE-ENGINE\"><code class=\"xref std std-setting docutils literal notranslate\">DATABASE-ENGINE</code></a> i din <code class=\"docutils literal notranslate\">settings.py</code>-fil:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>DATABASES <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;mydbengine&quot;</span><span class=\"p\">,</span>\n        <span class=\"c1\"># ...</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>Du kan se den aktuella listan över databasmotorer genom att titta i <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/6.1.x/django/db/backends\">django/db/backends</a>.</p>\n</section>\n<section id=\"using-a-3rd-party-database-backend\">\n<span id=\"third-party-notes\"></span><h2>Använda en databasbackend från tredje part<a class=\"heading-anchor\" href=\"#using-a-3rd-party-database-backend\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Förutom de databaser som stöds officiellt finns det backends som tillhandahålls av tredje part som gör att du kan använda andra databaser med Django:</p>\n<ul class=\"simple\">\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/django-cockroachdb/\">CockroachDB</a></p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/django-firebird/\">Firebird</a></p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/django-google-spanner/\">Google Cloud Spanner</a></p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/mssql-django/\">Microsoft SQL Server</a></p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/django-mongodb-backend/\">MongoDB</a></p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/django-snowflake/\">Snöflinga</a></p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/django-tidb/\">TiDB</a></p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/django-yugabytedb/\">YugabyteDB</a></p></li>\n</ul>\n<p>De Django-versioner och ORM-funktioner som stöds av dessa inofficiella backends varierar avsevärt. Frågor om de specifika funktionerna i dessa inofficiella backends, tillsammans med eventuella supportfrågor, bör riktas till de supportkanaler som tillhandahålls av varje tredjepartsprojekt.</p>\n</section>","rootId":"databases","toc":[{"title":"Allmänna anteckningar","anchor":"general-notes","children":[{"title":"Beständiga anslutningar","anchor":"persistent-connections","children":[{"title":"Hantering av anslutningar","anchor":"connection-management","children":[]},{"title":"Förbehåll","anchor":"caveats","children":[]}]},{"title":"Avkodning","anchor":"encoding","children":[]}]},{"title":"PostgreSQL anteckningar","anchor":"postgresql-notes","children":[{"title":"PostgreSQL-anslutningsinställningar","anchor":"postgresql-connection-settings","children":[]},{"title":"Optimera PostgreSQL: s konfiguration","anchor":"optimizing-postgresql-s-configuration","children":[]},{"title":"Isolationsnivå","anchor":"isolation-level","children":[]},{"title":"Roll","anchor":"role","children":[]},{"title":"Anslutningspool","anchor":"connection-pool","children":[]},{"title":"Bindning av parametrar på serversidan","anchor":"server-side-parameters-binding","children":[]},{"title":"Index för kolumnerna varchar och text","anchor":"indexes-for-varchar-and-text-columns","children":[]},{"title":"Migrationsoperation för att lägga till tillägg","anchor":"migration-operation-for-adding-extensions","children":[]},{"title":"Markörer på serversidan","anchor":"server-side-cursors","children":[{"title":"Transaktionspoolning och cursorer på serversidan","anchor":"transaction-pooling-and-server-side-cursors","children":[]}]},{"title":"Manuellt specificerade värden för primärnycklar med automatisk inkrementering","anchor":"manually-specifying-values-of-auto-incrementing-primary-keys","children":[]},{"title":"Test av databasmallar","anchor":"test-database-templates","children":[]},{"title":"Snabbare testkörning med icke-durabla inställningar","anchor":"speeding-up-test-execution-with-non-durable-settings","children":[]}]},{"title":"MariaDB anteckningar","anchor":"mariadb-notes","children":[]},{"title":"Anteckningar om MySQL","anchor":"mysql-notes","children":[{"title":"Stöd för version","anchor":"version-support","children":[]},{"title":"Lagringsmotorer","anchor":"storage-engines","children":[]},{"title":"MySQL DB API-drivrutiner","anchor":"mysql-db-api-drivers","children":[{"title":"mysqlclient","anchor":"mysqlclient","children":[]},{"title":"MySQL Connector/Python","anchor":"id8","children":[]}]},{"title":"Definitioner av tidszoner","anchor":"time-zone-definitions","children":[]},{"title":"Skapa din databas","anchor":"creating-your-database","children":[{"title":"Inställningar för sortering","anchor":"collation-settings","children":[]}]},{"title":"Anslutning till databasen","anchor":"connecting-to-the-database","children":[{"title":"Ställa in sql_mode","anchor":"setting-sql-mode","children":[]},{"title":"Isolationsnivå","anchor":"mysql-isolation-level","children":[]}]},{"title":"Skapa dina tabeller","anchor":"creating-your-tables","children":[]},{"title":"Tabellnamn","anchor":"table-names","children":[]},{"title":"Spara poäng","anchor":"savepoints","children":[]},{"title":"Anteckningar om specifika områden","anchor":"notes-on-specific-fields","children":[{"title":"Teckenfält","anchor":"character-fields","children":[]},{"title":"begränsningar för TextField","anchor":"textfield-limitations","children":[]},{"title":"Stöd för bråkdelar av sekunder för Time- och DateTime-fält","anchor":"fractional-seconds-support-for-time-and-datetime-fields","children":[]},{"title":"TIMESTAMP kolumner","anchor":"timestamp-columns","children":[]}]},{"title":"Radlåsning med QuerySet.select_for_update()","anchor":"row-locking-with-queryset-select-for-update","children":[]},{"title":"Automatisk typcasting kan leda till oväntade resultat","anchor":"automatic-typecasting-can-cause-unexpected-results","children":[]}]},{"title":"Anteckningar om SQLite","anchor":"sqlite-notes","children":[{"title":"Matchning av substrängar och skiftlägeskänslighet","anchor":"substring-matching-and-case-sensitivity","children":[]},{"title":"Decimalhantering","anchor":"decimal-handling","children":[]},{"title":"felmeddelandet ”Databasen är låst”","anchor":"database-is-locked-errors","children":[{"title":"Transaktionsbeteende","anchor":"transactions-behavior","children":[]}]},{"title":"QuerySet.select_for_update() stöds inte","anchor":"queryset-select-for-update-not-supported","children":[]},{"title":"Isolering vid användning av QuerySet.iterator()","anchor":"isolation-when-using-queryset-iterator","children":[]},{"title":"Aktivera JSON1-tillägget på SQLite","anchor":"enabling-json1-extension-on-sqlite","children":[]},{"title":"Ställa in pragma-alternativ","anchor":"setting-pragma-options","children":[]}]},{"title":"Oracle anteckningar","anchor":"oracle-notes","children":[{"title":"Anslutning till databasen","anchor":"id13","children":[{"title":"Fullständig DSN och Easy Connect","anchor":"full-dsn-and-easy-connect","children":[]}]},{"title":"Anslutningspool","anchor":"oracle-pool","children":[]},{"title":"INFOGA … ÅTERVÄNDANDE TILL","anchor":"insert-returning-into","children":[]},{"title":"Problem med namngivning","anchor":"naming-issues","children":[]},{"title":"NULL och tomma strängar","anchor":"null-and-empty-strings","children":[]},{"title":"begränsningar för TextField","anchor":"id15","children":[]}]},{"title":"Underklassning av de inbyggda databasbackends","anchor":"subclassing-the-built-in-database-backends","children":[]},{"title":"Använda en databasbackend från tredje part","anchor":"using-a-3rd-party-database-backend","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API-referens","url":"/sv/6.1/ref/"}],"prev":{"docname":"ref/csrf","title":"Skydd mot Cross Site Request Forgery","url":"/sv/6.1/ref/csrf/"},"next":{"docname":"ref/django-admin","title":"django-admin och manage.py","url":"/sv/6.1/ref/django-admin/"},"formats":{"html":"/sv/6.1/ref/databases/","markdown":"/sv/6.1/ref/databases.md","json":"/sv/6.1/ref/databases.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/ref/databases.txt","official":"https://docs.djangoproject.com/sv/6.1/ref/databases/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}