In Django ORM (Objektrelationszuordnung) sind Modelle eine entscheidende Komponente, die Datenbanktabellen und deren zugehörige Felder darstellt. Im Wesentlichen definiert ein Modell die Struktur Ihrer Daten, einschließlich der Felder und deren Einschränkungen, die dann den Tabellen in der Datenbank zugeordnet werden. Wenn Sie in Django ein Modell erstellen, erstellen Sie im Wesentlichen eine Python -Klasse, die von django.db.models.Model
erbt. Diese Klasse definiert verschiedene Attribute, die zu den Feldern der Tabelle in der Datenbank werden.
Zum Beispiel könnte ein einfaches Modell für ein Buch so aussehen:
<code class="python">from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) publication_date = models.DateField()</code>
In diesem Beispiel ist Book
ein Modell mit drei Feldern: title
, author
und publication_date
. Djangos ORM erstellt mit diesen Feldern eine entsprechende Tabelle in der Datenbank.
Modelle in Django ORM bieten zahlreiche Vorteile und verbessern sowohl den Entwicklungsprozess als auch die Wartbarkeit der Anwendung:
Das Definieren von Beziehungen zwischen Modellen in Django ORM erfolgt unter Verwendung spezifischer Feldtypen, die verschiedene Arten von Beziehungen darstellen. Hier sind die Hauptarten von Beziehungen und wie man sie definiert:
Eins-zu-Eins-Beziehungen :
Verwenden Sie OneToOneField
, wenn eine Zeile in einer Tabelle mit genau einer Zeile in einer anderen Tabelle zusammenhängt. Dies ist nützlich, um Modelle zu erweitern oder wenn Sie einen großen Tisch in zwei Teile teilen müssen.
<code class="python">class Driver(models.Model): license_number = models.CharField(max_length=20) class Car(models.Model): driver = models.OneToOneField(Driver, on_delete=models.CASCADE)</code>
Eins-zu-Viele-Beziehungen :
Verwenden Sie ForeignKey
, um eine Beziehung zu definieren, in der eine einzelne Zeile in einer Tabelle mit mehreren Zeilen in einer anderen Tabelle zugeordnet werden kann. Dies ist die häufigste Art der Beziehung in Datenbanken.
<code class="python">class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): author = models.ForeignKey(Author, on_delete=models.CASCADE) title = models.CharField(max_length=200)</code>
Viele zu viele Beziehungen :
Verwenden Sie ManyToManyField
, wenn Zeilen in einer Tabelle mit mehreren Zeilen in einer anderen Tabelle zugeordnet werden können, und umgekehrt. Dies ist nützlich für Szenarien wie die Kategorisierung von Elementen.
<code class="python">class Book(models.Model): title = models.CharField(max_length=200) class Author(models.Model): name = models.CharField(max_length=100) books = models.ManyToManyField(Book)</code>
Wenn Sie diese Beziehungen definieren, geben Sie den Parameter on_delete
an, um zu definieren, was passiert, wenn das zugehörige Objekt gelöscht wird.
Das Optimieren von Modellabfragen in Django ORM ist für die Verbesserung der Leistung Ihrer Anwendung unerlässlich. Hier sind einige Best Practices, denen Sie folgen sollten:
Wählen Sie verwandte und vorab zugeordnete : Verwandte:
Verwenden Sie select_related()
für Eins-zu-Eins- und viele-zu-Eins-Beziehungen, um die Anzahl der Datenbankabfragen zu verringern. Verwenden Sie prefetch_related()
für viele zu viele und viele zu einem umgekehrten Beziehungen.
<code class="python"># Fetching all books with their authors books = Book.objects.select_related('author').all() # Fetching all authors with their books authors = Author.objects.prefetch_related('books').all()</code>
Verwenden Sie effiziente QuerySet -Methoden :
Nutzen Sie die QuerySet -API -Methoden von Django wie filter()
, exclude()
, order_by()
und values()
um nur die erforderlichen Daten zu holen und die Menge der verarbeiteten und übertragenen Daten zu verringern.
<code class="python"># Fetching only specific fields authors = Author.objects.values('id', 'name')</code>
select_related()
und prefetch_related()
um dies zu mildern. Verwenden Sie die Indizes entsprechend :
Fügen Sie Datenbankindizes zu Feldern hinzu, die häufig bei Filtern oder Bestellvorgängen verwendet werden, um die Abfrageausführung zu beschleunigen.
<code class="python">class Book(models.Model): title = models.CharField(max_length=200, db_index=True)</code>
Begrenzen Sie Abfragergebnisse :
Verwenden Sie Methoden wie limit()
und offset()
oder Djangos QuerySet
Slicing, um die Anzahl der abgerufenen Objekte zu begrenzen, insbesondere beim Umgang mit großen Datensätzen.
<code class="python"># Fetching the first 10 books books = Book.objects.all()[:10]</code>
select_related()
auf ManyToManyField
oder reverse ForeignKey
:select_related()
funktioniert nicht mit ManyToManyField
oder Reverse ForeignKey
-Beziehungen. Verwenden Sie stattdessen prefetch_related()
.Durch die Befolgung dieser Best Practices können Sie die Leistung Ihrer Django -ORM -Abfragen erheblich optimieren und die Gesamteffizienz Ihrer Anwendung verbessern.
Das obige ist der detaillierte Inhalt vonWas sind Modelle in Django Orm?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!