FRÅGOR OCH SVAR: Databaser och modeller

Hur kan jag se de råa SQL-frågorna som Django kör?

Se till att din Django DEBUG-inställning är inställd på True. Gör sedan så här:

>>> from django.db import connection
>>> connection.queries
[{'sql': 'SELECT polls_polls.id, polls_polls.question, polls_polls.pub_date FROM polls_polls',
'time': '0.002'}]

connection.queries är endast tillgänglig om DEBUG är True. Det är en lista över ordböcker i frågeexekveringsordning. Varje ordbok har följande:

  • sql - Den obearbetade SQL-satsen

  • time - Hur lång tid det tog att utföra uttalandet, i sekunder.

connection.queries inkluderar alla SQL-satser - INSERT, UPDATES, SELECT, etc. Varje gång din app träffar databasen kommer frågan att registreras.

Om du använder flera databaser kan du använda samma gränssnitt för varje medlem i ordlistan connections`:

>>> from django.db import connections
>>> connections["my_db_alias"].queries

Om du behöver rensa frågelistan manuellt vid någon tidpunkt i dina funktioner, anropa reset_queries(), så här:

from django.db import reset_queries

reset_queries()

Kan jag använda Django med en redan befintlig databas?

Ja, se Integrering med en äldre databas.

Om jag gör ändringar i en modell, hur uppdaterar jag då databasen?

Ta en titt på Djangos stöd för schemamigreringar.

Om du inte har något emot att rensa data har verktyget manage.py i ditt projekt ett alternativ flush` som återställer databasen till det tillstånd den hade omedelbart efter att migrate` kördes.

Har Django-modeller stöd för primärnycklar med flera kolumner?

Nej, endast primärnycklar med en kolumn stöds.

Men det här är inget problem i praktiken, eftersom det inte finns något som hindrar dig från att lägga till andra begränsningar (med hjälp av modellalternativet unique_together eller genom att skapa begränsningen direkt i din databas) och genomdriva unikheten på den nivån. Primärnycklar med en enda kolumn behövs för att t.ex. administratörsgränssnittet ska fungera; du behöver t.ex. ett enda värde för att ange ett objekt som ska redigeras eller tas bort.

Har Django stöd för NoSQL-databaser?

NoSQL-databaser stöds inte officiellt av Django själv. Det finns dock ett antal sidoprojekt och förgreningar som tillåter NoSQL-funktionalitet i Django.

Du kan ta en titt på wikisidan där några projekt diskuteras.

Hur lägger jag till databasspecifika alternativ till mina CREATE TABLE-satser, till exempel att ange MyISAM som tabelltyp?

Vi försöker undvika att lägga till specialfall i Django-koden för att tillgodose alla databasspecifika alternativ som tabelltyp etc. Om du vill använda något av dessa alternativ skapar du en migrering med en RunSQL operation som innehåller ALTER TABLE-satser som gör vad du vill göra.

Om du t.ex. använder MySQL och vill att dina tabeller ska använda tabelltypen MyISAM använder du följande SQL:

ALTER TABLE myapp_mytable ENGINE=MyISAM;