Django-Modelle
Django bietet hervorragende Unterstützung für verschiedene Datenbanken, darunter: PostgreSQL, MySQL, SQLite, Oracle.
Django bietet eine einheitliche Aufruf-API für diese Datenbanken. Wir können verschiedene Datenbanken entsprechend unseren Geschäftsanforderungen auswählen.
MySQL ist die am häufigsten verwendete Datenbank in Webanwendungen. In diesem Kapitel verwenden wir MySQL als Beispiel zur Demonstration. Sie können dasMySQL-Tutorialdieser Website verwenden, um mehr über die Grundlagen von MySQL zu erfahren.
Wenn Sie den mysql-Treiber nicht installiert haben, können Sie den folgenden Befehl ausführen, um ihn zu installieren:
sudo pip3 install pymysql
Django ORM
Django-Modelle verwenden das integrierte ORM.
Objekt-relationales Mapping (kurz ORM) wird verwendet, um die Umwandlung zwischen Daten unterschiedlicher Systemtypen in objektorientierten Programmiersprachen zu implementieren.
ORM fungiert als Brücke zwischen der Geschäftslogikschicht und der Datenbankschicht.
ORM persistiert Objekte in einem Programm automatisch in der Datenbank, indem es Metadaten verwendet, die die Zuordnung zwischen Objekten und der Datenbank beschreiben.

Vorteile der Verwendung von ORM:
- Verbessert die Entwicklungseffizienz.
- Verschiedene Datenbanken können reibungslos gewechselt werden.
Nachteile der Verwendung von ORM:
- Wenn ORM-Code in SQL-Anweisungen umgewandelt wird, dauert dies eine gewisse Zeit, und die Ausführungseffizienz wird verringert.
- Wenn man lange Zeit ORM-Code schreibt, verringert dies die Fähigkeit, SQL-Anweisungen zu schreiben.
ORM-Parsing-Prozess:
- 1. ORM wandelt Python-Code in SQL-Anweisungen um.
- 2. Die SQL-Anweisung wird über pymysql an den Datenbankserver übertragen.
- 3. Die SQL-Anweisung in der Datenbank ausführen und das Ergebnis zurückgeben.
ORM-Zuordnungstabelle:

Datenbankkonfiguration
Wie Django die MySQL-Datenbank verwendet
Syntax zum Erstellen einer MySQL-Datenbank (ORM kann nicht auf Datenbankebene arbeiten, sondern nur auf Datentabellen):
create database 数据库名称 default charset=utf8; # 防止编码问题,指定为 utf8
Zum Beispiel erstellen wir eine Datenbank namens example und geben die Kodierung als utf8 an:
create database example default charset=utf8;
Suchen Sie in der Datei settings.py des Projekts den Konfigurationseintrag DATABASES und ändern Sie dessen Informationen zu:
HelloWorld/HelloWorld/settings.py: Code der Datei:
Wenn Sie Python2.x verwenden, werden hier chinesische Kommentare hinzugefügt, daher müssen Sie am Anfang der Datei HelloWorld/settings.py Folgendes hinzufügen:# -*- coding: UTF-8 -*-。
Das Obige enthält den Datenbanknamen und die Benutzerinformationen, die mit den entsprechenden Datenbank- und Benutzereinstellungen in MySQL übereinstimmen. Django verbindet sich gemäß dieser Einstellung mit der entsprechenden Datenbank und dem entsprechenden Benutzer in MySQL.
Als Nächstes weisen Sie Django an, das Modul pymysql zur Verbindung mit der MySQL-Datenbank zu verwenden:
Beispiel
import pymysql
pymysql.install_as_MySQLdb()
Modell definieren
App erstellen
Django schreibt vor, dass Sie eine App erstellen müssen, wenn Sie Modelle verwenden möchten. Wir verwenden den folgenden Befehl, um eine App namens TestModel zu erstellen:
django-admin startapp TestModel
Die Verzeichnisstruktur ist wie folgt:
HelloWorld |-- HelloWorld |-- manage.py ... |-- TestModel | |-- __init__.py | |-- admin.py | |-- models.py | |-- tests.py | `-- views.py
Wir ändern die Datei TestModel/models.py, der Code lautet wie folgt:
HelloWorld/TestModel/models.py: Datei-Code:
Der obige Klassenname stellt den Datenbanktabellennamen dar, und er erbt von models.Model. Die Felder innerhalb der Klasse stellen die Felder (name) in der Datentabelle dar, und die Datentypen werden durch CharField (entspricht varchar), DateField (entspricht datetime) bestimmt. Der Parameter max_length begrenzt die Länge.
Suchen Sie als Nächstes den Eintrag INSTALLED_APPS in settings.py, wie folgt:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'TestModel', # 添加此项
)
In der Befehlszeile ausführen:
$ python3 manage.py migrate # 创建表结构 $ python3 manage.py makemigrations TestModel # 让 Django 知道我们在我们的模型有一些变更 $ python3 manage.py migrate TestModel # 创建表结构
Wenn Sie die Worte "Creating table..." in ein paar Zeilen sehen, wurde Ihre Datentabelle erstellt.
Creating tables ... …… Creating table TestModel_test #我们自定义的表 ……
Die Struktur des Tabellennamens ist: Anwendungsname_Klassenname (z. B. TestModel_test).
Hinweis:Obwohl wir in models keinen Primärschlüssel für die Tabelle festgelegt haben, fügt Django automatisch eine id als Primärschlüssel hinzu.
Häufige Fehlermeldungen
Wenn bei der Ausführung des obigen Befehls die folgende Fehlermeldung erscheint:

Der Grund ist, dass MySQLclient derzeit nur Python 3.4 unterstützt. Wenn Sie also eine höhere Version von Python verwenden, müssen Sie wie folgt ändern:
Suchen Sie über den Dateipfad in der Fehlermeldung die Datei base.py im Pfad ...site-packages\Django-2.0-py3.6.egg\django\db\backends\mysql und kommentieren Sie diese beiden Codezeilen aus (der Code befindet sich am Anfang der Datei):
if version < (1, 3, 13):
raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

Im Allgemeinen klicken Sie auf die Dateipfadinformationen des Codes in der Fehlermeldung, und es springt automatisch zur Zeilennummer in der Fehlerdatei. An dieser Stelle kommentieren wir die Codezeile aus, die den Fehler gemeldet hat.
Wenn die folgende Fehlermeldung erscheint:

Wir klicken auf die Dateipfadangabe des Codes im Fehler, springen zur Zeilennummer in der Fehlerdatei, und an dieser Stelle fügen wir Folgendes vor der fehlerhaften Codezeile hinzu:
query = query.encode()

Datenbankoperation
Als Nächstes fügen wir die Datei testdb.py (unten beschrieben) im Verzeichnis HelloWorld hinzu und ändern urls.py:
HelloWorld/HelloWorld/urls.py: Dateicode:
Daten hinzufügen
Um Daten hinzuzufügen, müssen Sie zuerst ein Objekt erstellen und dann die Funktion save ausführen, was dem INSERT in SQL entspricht:
HelloWorld/HelloWorld/testdb.py: Dateicode:
Besuchen Siehttp://127.0.0.1:8000/testdbDann sehen Sie einen Hinweis, der anzeigt, dass die Daten erfolgreich hinzugefügt wurden.
Das Ausgabeergebnis ist wie folgt:

Daten abrufen
Django bietet mehrere Möglichkeiten, Datenbankinhalte abzurufen, wie im folgenden Code gezeigt:
HelloWorld/HelloWorld/testdb.py: Dateicode:
Daten aktualisieren
Um Daten zu ändern, können Sie save() oder update() verwenden:
HelloWorld/HelloWorld/testdb.py: Dateicode:
Daten löschen
Um ein Objekt in der Datenbank zu löschen, müssen Sie nur die delete()-Methode dieses Objekts aufrufen: