Django业务流程图:
M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM),做数据存储用的。
Django 官方文档:https://docs.djangoproject.com/zh-hans/3.1/
1、配置数据库mysql
先安装pymysql(pip install pymysql),然后在Django的setting中配置。
配置参考https://www.jianshu.com/p/1220bfc1fe63 中的第9章节。
2、创建models.py文件
在创建APP时,并不会默认生成models.py,需要手工在APP目录创建models.py文件。
3、初始化pymysql
在Django工程同名APP的__init__.py中写入:
import pymysql
pymysql.install_as_MySQLdb()
4、通过模型创建数据表
4.1 定义数据表的Class
在models.py文件中定义:
from django.db import models
class Student(models.Model):
# id Django会自动创建,并设置为主键,不需要代码语句创建
name = models.CharField(max_length=50)
age = models.IntegerField()
score = models.IntegerField()
4.2 makemigrations
# 生成数据同步脚本,使用这个python脚本,Django才能生成sql语句,才能转换成mysql数据表。
python manage.py makemigrations
4.3 migrate
# 同步数据库,使用4.2中生成的脚本,Django转换生成sql,从而同步到mysql,创建数据表。
python manage.py migrate
生成的数据库名是APP名_Class名。
5、从已存在的数据表,反向生成模型
5.1 生成模型代码
# 根据已有数据库反向生成django模型
python manage.py inspectdb [table]
上面这条语句,可以带表名,则只生成这一张表的模型脚本。
如果不带表名,则生成所有表的模型脚本。
5.2 模型脚本保存到models.py文件
生成的模型脚本,只是输出在输出窗口,可以追加到models.py文件里,或者手工拷贝粘贴到models.py文件里。
6、ORM操作表
6.1 数据表增加记录
方法1:
n=Student()
n.name='石破天'
n.age=20
n.score=96
n.save()
方法2:
Student.objects.create(name='石破天', age=20, score=95)
方法3:
info = {"name":"石破天", "age":20, "score":95}
Student.objects.create(**info )
6.2 数据表删除记录
Student.objects.filter(name='石破天').delete()
6.3 数据表修改
Student.objects.filter(name='石破天').update(score=100)
6.4 数据表查询
Student.objects.all() #选取所有数据
Student.objects.all().count() #计数
Student.objects.values('name') #某一列数据
Student.objects.filter(name='石破天').count() #符合条件计数
Student.objects.get(score=100)
Student.objects.get(score=100).name
6.5 更新或增加
# defaults是需要更新的数据字典,后面参数是用来查询的是否存在的,如果存在就更新,反之则增加记录
Student.objects.update_or_create(defaults={"age":20, "score":95}, name='石破天')
6.6 判断记录是否存在
Student.objects.filter(score=100).exists()
6.7 列去重
Student.objects.distinct().values('score')
6.8 列排序
Student.objects.order_by('score').values() //升序
Student.objects.order_by('-score').values() //降序
6.9 取top 10
Student.objects.order_by('-score')[:10].values()