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-satsentime
- 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;