Entwicklung von WeChat Mini-Programmen (5) Verwendung der Django Framework-Datenbank
Django bietet gute Unterstützung für verschiedene Datenbanken, darunter: PostgreSQL, MySQL, SQLite, Oracle.
Django bietet eine einheitliche Aufruf-API für diese Datenbanken. Wir können je nach Geschäftsanforderungen unterschiedliche Datenbanken auswählen.
MySQL ist die am häufigsten verwendete Datenbank in Webanwendungen.
Django ORM Das
Django-Modell verwendet ein eigenes ORM.
Object Relational Mapping (kurz ORM) wird verwendet, um die Datenkonvertierung zwischen verschiedenen Systemtypen in objektorientierten Programmiersprachen zu implementieren.
ORM fungiert als Brücke zwischen der Geschäftslogikschicht und der Datenbankschicht.
ORM verwendet Metadaten, die die Zuordnung zwischen Objekten und Datenbanken beschreiben, um Objekte im Programm automatisch in der Datenbank zu speichern.
使用 ORM 的好处:
提高开发效率。
不同数据库可以平滑切换。
使用 ORM 的缺点:
ORM 代码转换为 SQL 语句时,需要花费一定的时间,执行效率会有所降低。
长期写 ORM 代码,会降低编写 SQL 语句的能力。
ORM 解析过程:
1、ORM 会将 Python 代码转成为 SQL 语句。
2、SQL 语句通过 pymysql 传送到数据库服务端。
3、在数据库中执行 SQL 语句并将结果返回。
ORM-Korrespondenztabelle:
Datenbankkonfiguration
Django Verwendung der MySQL- Datenbank zum
Erstellen einer MySQL-Datenbank (ORM kann nicht auf Datenbankebene ausgeführt werden, kann nur auf Datentabelle ausgeführt werden) Syntax:
create database 数据库名称 default charset=utf8; # 防止编码问题,指定为 utf8
Wir erstellen eine Datenbank namens runoob mit der als utf8 angegebenen Codierung:
create database runoob default charset=utf8;
Öffnen Sie Port 3306.
Nach dem Einrichten der Datenbank finden wir das Konfigurationselement DATABASES in der Datei settings.py des Projekts und ändern seine Informationen in:
DATABASES = {
'default':
{
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'runoob', # 数据库名称
'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1
'PORT': 3306, # 端口
'USER': 'root', # 数据库用户名
'PASSWORD': 'xulei111', # 数据库密码
}
}
Wenn Sie die Python2.x-Version verwenden, werden hier chinesische Kommentare hinzugefügt. Fügen Sie daher # --coding: UTF-8 - zum Kopf der Datei HelloWorld / settings.py hinzu .
Das Obige enthält den Datenbanknamen und die Benutzerinformationen, die mit den entsprechenden Datenbank- und Benutzereinstellungen in MySQL übereinstimmen. Basierend auf dieser Einstellung stellt Django eine Verbindung mit der entsprechenden Datenbank und dem entsprechenden Benutzer in MySQL her.
Weisen Sie Django als Nächstes an, das Pymysql-Modul zu verwenden, um eine Verbindung zur MySQL-Datenbank herzustellen:
# 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置
import pymysql
pymysql.install_as_MySQLdb()
Django schreibt vor, dass Sie eine App erstellen müssen, wenn Sie ein Modell verwenden möchten. Wir verwenden den folgenden Befehl, um eine TestModel-App zu erstellen:
django-admin startapp TestModel
目录结构如下:
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:
# models.py
from django.db import models
class Test(models.Model):
name = models.CharField(max_length=20)
Der obige Klassenname stellt den Namen der Datenbanktabelle dar und erbt Modelle. Modell. Das Feld in der Klasse stellt das Feld (Name) in der Datentabelle dar. Der Datentyp ist CharField (entspricht varchar), DateField (entspricht datetime), max_length Der Parameter begrenzt die Länge.
Suchen Sie als Nächstes das Element INSTALLED_APPS in settings.py wie folgt:
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'TestModel', #这里是要添加的部分
]
$ python manage.py migrate # 创建表结构
$ python manage.py makemigrations TestModel # 让 Django 知道我们在我们的模型有一些变更
$ python manage.py migrate TestModel # 创建表结构
Im ersten Schritt ist jedoch eine Fehlermeldung
aufgetreten . Versuchen Sie, die Abhängigkeit herunterzuladen (whl manuell herunterladen)
und hier zu installieren
. Ich habe sie erfolgreich installiert. Wenn Sie Probleme haben, können wir
sie gemeinsam lösen. Aktualisieren Sie dann mysqlclient weiter und
finden Sie diese Ein Fehler wird weiterhin gemeldet, giao!
Dann kommentieren Sie einfach diese beiden Codezeilen aus,
um sie in der Befehlszeile auszuführen:
$ python3 manage.py migrate # 创建表结构
$ python3 manage.py makemigrations TestModel # 让 Django 知道我们在我们的模型有一些变更
$ python3 manage.py migrate TestModel # 创建表结构
Die Struktur des Tabellennamens lautet: Anwendungsname_Klassenname (z. B. TestModel_test).
Hinweis: Obwohl wir in Modellen keinen Primärschlüssel für die Tabelle festgelegt haben, fügt Django automatisch eine ID als Primärschlüssel hinzu.
Als Nächstes fügen wir die Datei testdb.py im HelloWorld-Verzeichnis hinzu und ändern urls.py:
from django.urls import path
from . import views,testdb
urlpatterns = [
path('runoob/', views.runoob),
path('testdb/', testdb.testdb),
]
from django.http import HttpResponse
from TestModel.models import Test
# 数据库操作
def testdb(request):
test1 = Test(name='runoob')
test1.save()
return HttpResponse("<p>数据添加成功!</p>")
Daten
abrufen Django bietet verschiedene Möglichkeiten, um den Inhalt der Datenbank abzurufen, wie im folgenden Code gezeigt:
from django.http import HttpResponse
from TestModel.models import Test
# 数据库操作
def testdb(request):
# 初始化
response = ""
response1 = ""
# 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
list = Test.objects.all()
# filter相当于SQL中的WHERE,可设置条件过滤结果
response2 = Test.objects.filter(id=1)
# 获取单个对象
response3 = Test.objects.get(id=1)
# 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2;
Test.objects.order_by('name')[0:2]
#数据排序
Test.objects.order_by("id")
# 上面的方法可以连锁使用
Test.objects.filter(name="runoob").order_by("id")
# 输出所有数据
for var in list:
response1 += var.name + " "
response = response1
return HttpResponse("<p>" + response + "</p>")
Daten
aktualisieren Um Daten zu ändern, können Sie save () oder update () verwenden:
from django.http import HttpResponse
from TestModel.models import Test
# 数据库操作
def testdb(request):
# 修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE
test1 = Test.objects.get(id=1)
test1.name = 'Google'
test1.save()
# 另外一种方式
#Test.objects.filter(id=1).update(name='Google')
# 修改所有的列
# Test.objects.all().update(name='Google')
return HttpResponse("<p>修改成功</p>")
Daten
löschen Um ein Objekt in der Datenbank zu löschen, müssen Sie nur die delete () -Methode des Objekts aufrufen:
from django.http import HttpResponse
from TestModel.models import Test
# 数据库操作
def testdb(request):
# 删除id=1的数据
test1 = Test.objects.get(id=1)
test1.delete()
# 另外一种方式
# Test.objects.filter(id=1).delete()
# 删除所有数据
# Test.objects.all().delete()
return HttpResponse("<p>删除成功</p>")