Desarrollo de miniprogramas de WeChat (5) Uso de la base de datos de Django Framework
Django proporciona un buen soporte para varias bases de datos, que incluyen: PostgreSQL, MySQL, SQLite, Oracle.
Django proporciona una API de llamada unificada para estas bases de datos. Podemos elegir diferentes bases de datos de acuerdo a nuestras necesidades comerciales.
MySQL es la base de datos más utilizada en aplicaciones web.
ORM de
Django El modelo de Django utiliza su propio ORM.
El mapeo relacional de objetos (ORM para abreviar) se utiliza para implementar la conversión de datos entre diferentes tipos de sistemas en lenguajes de programación orientados a objetos.
ORM actúa como un puente entre la capa de lógica empresarial y la capa de base de datos.
ORM utiliza metadatos que describen el mapeo entre objetos y bases de datos para persistir automáticamente los objetos en el programa en la base de datos.
使用 ORM 的好处:
提高开发效率。
不同数据库可以平滑切换。
使用 ORM 的缺点:
ORM 代码转换为 SQL 语句时,需要花费一定的时间,执行效率会有所降低。
长期写 ORM 代码,会降低编写 SQL 语句的能力。
ORM 解析过程:
1、ORM 会将 Python 代码转成为 SQL 语句。
2、SQL 语句通过 pymysql 传送到数据库服务端。
3、在数据库中执行 SQL 语句并将结果返回。
Tabla de correspondencia ORM:
configuración de la base de datos
Django cómo usar la base de datos mysql para
crear una base de datos MySQL (ORM no puede operar al nivel de la base de datos, solo puede operar a la tabla de datos) Sintaxis:
create database 数据库名称 default charset=utf8; # 防止编码问题,指定为 utf8
Creamos una base de datos llamada runoob con la codificación especificada como utf8:
create database runoob default charset=utf8;
Abra el puerto 3306.
Después de establecer la base de datos, encontramos el elemento de configuración DATABASES en el archivo settings.py del proyecto y modificamos su información para:
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', # 数据库密码
}
}
Si está utilizando la versión Python2.x, los comentarios chinos se agregan aquí, por lo que debe agregar # --coding: UTF-8 - al encabezado del archivo HelloWorld / settings.py .
Lo anterior contiene el nombre de la base de datos y la información del usuario, que son los mismos que la base de datos correspondiente y la configuración del usuario en MySQL. Con base en esta configuración, Django se conecta con la base de datos y el usuario correspondientes en MySQL.
A continuación, dígale a Django que use el módulo pymysql para conectarse a la base de datos mysql:
# 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置
import pymysql
pymysql.install_as_MySQLdb()
Django estipula que si desea utilizar un modelo, debe crear una aplicación. Usamos el siguiente comando para crear una aplicación TestModel:
django-admin startapp TestModel
目录结构如下:
HelloWorld
|-- HelloWorld
|-- manage.py
...
|-- TestModel
| |-- __init__.py
| |-- admin.py
| |-- models.py
| |-- tests.py
| `-- views.py
Modificamos el archivo TestModel / models.py, el código es el siguiente:
# models.py
from django.db import models
class Test(models.Model):
name = models.CharField(max_length=20)
El nombre de la clase anterior representa el nombre de la tabla de la base de datos y hereda los modelos. Modelo. El campo de la clase representa el campo (nombre) en la tabla de datos. El tipo de datos es CharField (equivalente a varchar), DateField (equivalente a datetime), max_length El parámetro limita la longitud.
A continuación, busque el elemento INSTALLED_APPS en settings.py, de la siguiente manera:
# 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 # 创建表结构
Pero recibí un error en el primer paso.
Intente descargar la dependencia (descárguela manualmente)
e instálela
aquí. La instalé correctamente. Si tiene algún problema, podemos resolverlo juntos.
Luego, continúe actualizando mysqlclient y
encuentre eso todavía se informará un error, ¡giao!
Luego, simplemente comente estas dos líneas de código para
ejecutar en la línea de comando:
$ python3 manage.py migrate # 创建表结构
$ python3 manage.py makemigrations TestModel # 让 Django 知道我们在我们的模型有一些变更
$ python3 manage.py migrate TestModel # 创建表结构
La estructura del nombre de la tabla es: nombre de la aplicación_nombre de la clase (como: TestModel_test).
Nota: Aunque no establecimos una clave principal para la tabla en los modelos, Django agregará automáticamente una identificación como clave principal.
A continuación, agregamos el archivo testdb.py en el directorio HelloWorld y modificamos 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>")
Obtener datos
Django proporciona una variedad de formas de obtener el contenido de la base de datos, como se muestra en el siguiente código:
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>")
Actualizar datos Para
modificar datos, puede usar guardar () o actualizar ():
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>")
Eliminación de datos Para
eliminar un objeto en la base de datos, solo necesita llamar al método delete () del objeto:
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>")