模型ORM简介
# 链接资料
官方文档
刘江
# 1. 模型ORM简介
模型准确且唯一的描述了数据。它包含您储存的数据的重要字段和行为。一般来说,每一个模型都映射一张数据库表。
基础:
- 每个模型都是一个 Python 的类,这些类继承
[django.db.models.Model](https://docs.djangoproject.com/zh-hans/4.1/ref/models/instances/#django.db.models.Model)
- 模型类的每个属性都相当于一个数据库的字段。
- 利用这些,Django 提供了一个自动生成访问数据库的 API;请参阅 执行查询 (opens new window)。
对应关系:
- 类 --> 表
- 对象 --> 数据行(记录)
- 属性 --> 字段
# 2. 快速上手
# 2.1 配置
在settings.py中保存了数据库的连接配置信息,Django默认初始配置使用sqlite数据库。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
1
2
3
4
5
6
2
3
4
5
6
使用MySQL数据库首先需要安装驱动程序
pip install PyMySQL
1在Django的工程同名子目录的__init__.py文件中添加如下语句
from pymysql import install_as_MySQLdb install_as_MySQLdb()
1
2
3
4作用是让Django的ORM能以mysqldb的方式来调用PyMySQL。
修改DATABASES配置信息
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': SQL_DB_NAME, 'HOST': SQL_DB_HOST, 'PORT': SQL_DB_PORT, 'USER': SQL_DB_USER, 'PASSWORD': SQL_DB_PASSWORD, 'OPTIONS': { 'init_command': f'ALTER DATABASE {SQL_DB_NAME} CHARACTER SET utf8 COLLATE utf8_bin', 'charset': 'utf8mb4' } } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14在MySQL中创建数据库
create database django_demo default charset=utf8;
1
# 2.2 定义模型类
这个样例定义了一个 Person
模型,拥有 first_name
和 last_name
:
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
1
2
3
4
5
2
3
4
5
first_name
和 last_name
是模型的 字段 (opens new window)。每个字段都被指定为一个类属性,并且每个属性映射为一个数据库列。
上面的 Person
模型会创建一个如下的数据库表:
CREATE TABLE myapp_person (
"id" bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);
1
2
3
4
5
2
3
4
5
# 2.3 迁移
将模型类同步到数据库中。
# a. 生成迁移文件
python manage.py makemigrations
1
# b. 同步到数据库中
python manage.py migrate
1
编辑 (opens new window)