Modelos de Django
Django proporciona un excelente soporte para varias bases de datos, incluyendo: PostgreSQL, MySQL, SQLite, Oracle.
Django proporciona una API de llamada unificada para estas bases de datos. Podemos elegir diferentes bases de datos según las necesidades de nuestro negocio.
MySQL es la base de datos más utilizada en aplicaciones web. En este capítulo usaremos Mysql como ejemplo. Puedes, a través de este sitio,Tutorial de MySQLaprender más sobre los conceptos básicos de MySQL.
Si no tienes instalado el controlador de mysql, puedes ejecutar el siguiente comando para instalarlo:
sudo pip3 install pymysql
Django ORM
Los modelos de Django usan el ORM incorporado.
El mapeo objeto-relacional (Object Relational Mapping, abreviado ORM) se utiliza para lograr la conversión de datos entre sistemas de diferentes tipos en lenguajes de programación orientados a objetos.
El ORM actúa como un puente entre la capa de lógica de negocio y la capa de base de datos.
El ORM utiliza metadatos que describen el mapeo entre objetos y base de datos para persistir automáticamente los objetos del programa en la base de datos.

Ventajas de usar ORM:
- Mejora la eficiencia del desarrollo.
- Se puede cambiar entre diferentes bases de datos sin problemas.
Desventajas de usar ORM:
- Al convertir el código ORM en sentencias SQL, se necesita cierto tiempo, y la eficiencia de ejecución puede disminuir.
- Escribir código ORM durante mucho tiempo puede reducir la habilidad para escribir sentencias SQL.
Proceso de resolución de ORM:
- 1. ORM convertirá el código Python en sentencias SQL.
- 2. Las sentencias SQL se envían al servidor de base de datos a través de pymysql.
- 3. Las sentencias SQL se ejecutan en la base de datos y se devuelven los resultados.
Tabla de correspondencia de ORM:

Configuración de la base de datos
Cómo usar Django con la base de datos mysql
Sintaxis para crear la base de datos MySQL (ORM no puede operar a nivel de base de datos, solo puede operar a nivel de tablas de datos):
create database 数据库名称 default charset=utf8; # 防止编码问题,指定为 utf8
Por ejemplo, creamos una base de datos llamada ejemplo, especificando la codificación como utf8:
create database ejemplo default charset=utf8;
En el archivo settings.py del proyecto, encontramos el elemento de configuración DATABASES y modificamos su información de la siguiente manera:
HelloWorld/HelloWorld/settings.py: Código del archivo:
Si usas la versión Python2.x, aquí se han agregado comentarios en chino, por lo que debes agregar al inicio del archivo HelloWorld/settings.py# -*- coding: UTF-8 -*-。
Lo anterior incluye la información del nombre de la base de datos y del usuario, que es la misma que la configuración correspondiente en MySQL. Django se conecta con la base de datos y el usuario correspondientes en MySQL según esta configuración.
A continuación, dile a Django que use el módulo pymysql para conectarse a la base de datos mysql:
Ejemplo
import pymysql
pymysql.install_as_MySQLdb()
Definir el modelo
Crear la app
Django estipula que para usar modelos, debes crear una app. Usamos el siguiente comando para crear una app TestModel:
django-admin startapp TestModel
La estructura de directorios es la siguiente:
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:
HelloWorld/TestModel/models.py: Código del archivo:
Los nombres de clase anteriores representan los nombres de las tablas de la base de datos y heredan de models.Model. Los campos dentro de la clase representan los campos de la tabla de datos (name). Los tipos de datos están determinados por CharField (equivalente a varchar), DateField (equivalente a datetime), y el parámetro max_length limita la longitud.
A continuación, en settings.py, encuentra el elemento INSTALLED_APPS, como se muestra a continuación:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'TestModel', # 添加此项
)
Ejecuta en la línea de comandos:
$ python3 manage.py migrate # 创建表结构 $ python3 manage.py makemigrations TestModel # 让 Django 知道我们在我们的模型有一些变更 $ python3 manage.py migrate TestModel # 创建表结构
Al ver varias líneas con el texto "Creating table…", tu tabla de datos se ha creado.
Creating tables ... …… Creating table TestModel_test #我们自定义的表 ……
La estructura del nombre de la tabla es: nombre_de_aplicación_nombre_de_clase (por ejemplo: TestModel_test).
Nota:Aunque no establezcamos una clave primaria para la tabla en models, Django agregará automáticamente un id como clave primaria.
Mensajes de error comunes
Si al ejecutar el comando anterior aparece el siguiente mensaje de error:

El motivo es que MySQLclient actualmente solo es compatible con Python 3.4, por lo que si usas una versión superior de Python, debes modificar lo siguiente:
A través de la ruta del archivo en el mensaje de error, encuentra el archivo base.py en la ruta ...site-packages\Django-2.0-py3.6.egg\django\db\backends\mysql, y comenta estas dos líneas de código (el código está al principio del archivo):
if version < (1, 3, 13):
raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

Generalmente, al hacer clic en la información de la ruta del archivo de código del error, se saltará automáticamente a la línea en el archivo del error; en ese momento, comentamos la línea de código que tiene el error.
Si aparece el siguiente mensaje de error:

Hacemos clic en la ruta del archivo de código del error, saltamos a la línea en el archivo del error, y en ese momento agregamos antes de la línea de código con el error:
query = query.encode()

Operaciones de base de datos
A continuación, agregamos el archivo testdb.py en el directorio HelloWorld (se presenta a continuación) y modificamos urls.py:
HelloWorld/HelloWorld/urls.py: Código del archivo:
Agregar datos
Para agregar datos, primero debes crear un objeto y luego ejecutar la función save, lo que equivale a INSERT en SQL:
HelloWorld/HelloWorld/testdb.py: Código del archivo:
Visitahttp://127.0.0.1:8000/testdbEntonces podrás ver el mensaje de que los datos se agregaron con éxito.
El resultado de salida es el siguiente:

Obtener datos
Django proporciona varias formas de obtener el contenido de la base de datos, como se muestra en el siguiente código:
HelloWorld/HelloWorld/testdb.py: Código del archivo:
Actualizar datos
Para modificar datos, puedes usar save() o update():
HelloWorld/HelloWorld/testdb.py: Código del archivo:
Eliminar datos
Para eliminar un objeto de la base de datos, basta con llamar al método delete() de dicho objeto: