Django框架的使用教程--mysql数据库[三]
Django的数据库
1.在Django_test下的view.py里面model定义模型
from django.db import models # Create your models here. # 定义游戏模型类,继承models.Model
class GameInfo(models.Model):
gtitle = models.CharField(max_length=20, verbose_name='名称')
game_date = models.DateField(verbose_name='游戏发布日期')
# default可以设置默认值
game_download = models.IntegerField(default=0, verbose_name='游戏下载量')
gcommnet = models.IntegerField(default=0, verbose_name='游戏评论量')
is_delete = models.BooleanField(default=False, verbose_name="逻辑删除") # 定义元数据
class Meta:
# db_tablespace 指定这个模型对应的数据表放在哪个数据空间
# app_label 指定模型类的应用app
db_table = 'game' # 指名数据库类
verbose_name = '游戏' # 在admin站点显示的名称
verbose_name_plural = verbose_name # 显示复数名称 def __str__(self):
"""定义数据对象的显示信息"""
return self.gtitle # 定义游戏人物类
# 定义英雄模型类HeroInfo
class HeroInfo(models.Model):
GENDER_CHOICES = (
(0, 'male'),
(1, 'female')
)
hname = models.CharField(max_length=20, verbose_name='名称')
hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别')
hcomment = models.CharField(max_length=200, null=True, verbose_name='描述信息')
# 关联数据表 外键
hgame = models.ForeignKey(GameInfo, on_delete=models.CASCADE, verbose_name='游戏') # 外键
is_delete = models.BooleanField(default=False, verbose_name='逻辑删除') class Meta:
db_table = 'game_heros'
verbose_name = '英雄'
verbose_name_plural = verbose_name def __str__(self):
return self.hname
2.生成迁移文件

3.数据库迁移

4.数据库插入数据(插入game表的数据)
insert into game(gtitle,game_date, game_download,gcommnet,is_delete) values
('王者荣耀','2015-5-1',122,343,0),
('绝地求生','2016-7-24',363,403,0),
('天天酷跑','2005-12-24',20,80,0),
('时空猎人','1999-11-11',58,24,0);
插入game_heros数据表的数据
insert into game_heros(hname,hgender,hgame_id,hcomment,is_delete) values
('妲己',1,1,'魅惑',0),
('凯',0,1,'变身拿刀',0),
('诸葛亮',1,1,'远程导弹',0),
('黄总',1,1,'防御塔',0),
('吃鸡1号',0,1,'吃鸡1号技能',0),
('吃鸡2号',1,2,'吃鸡1号技能',0),
('吃鸡3号',1,2,'吃鸡1号技能',0),
('吃鸡4号',1,2,'吃鸡1号技能',0),
('吃鸡5号',0,2,'吃鸡5号技能',0),
('天天1号',1,3,'天天1号技能',0),
('天天2号',0,3,'天天2号技能',0),
('天天3号',1,3,'天天3号技能',0),
('天天4号',0,3,'天天4号技能',0),
('时空1号',1,4,'时空1号技能',0),
('时空2号',0,4,'时空2号技能',0),
('时空3号',0,4,'时空3号技能',0),
('时空4号',0,4,'时空4号技能',0);
数据库的操作
安装ipython
pip install ipython
进入命令脚本
python manage.py shell
数据库的增加
create方法
模型类.objects.create(数据表参数)
save方法
变量 = 模型类(参数)
变量.save()
数据库的查询
查询多个值
模型类.objects.all()
查询单个值
模型类.objects.get(id=2)
查询结果的数量
模型类.objects.count()
过滤查询
模型类.objects.filter(id__exact=1)
模糊查询
模型类.objects.filter(gtitle__contains='王')
模型类.objects.filter(gtitle__endswith='耀')
模型类.objects.filter(gtitle__startswith='天')
空查询
模型类.objects.filter(gtitle__isnull=False)
范围查询
模型类.objects.filter(id__in=[1,2])
比较查询
gt :大于
gte: 大于等于
lt :小与
lte: 小与等于
模型类.objects.filter(id__gt=3)
不等于
模型类.objects.exclude(id=1)
日期查询
模型类.objects.filter(game_date__gt=date(1900,1,1))
F对象(根据属性对比值)
from django.db.models import F
模型类.objects.filter(game_download__gte=F('gcomment'))
Q对象
与:
模型类.objects.filter(game_download__gt=20,id__lt=3)
或:
模型类.object.filter(game_download__gt=20).filter(id_lt=3)
用Q来表示&和|的连接:
模型类.objects.filter(Q(game_download__gt=20) | Q(pk__lt=3))
聚合函数
Avg 平均,Count 数量,Max 最大,Min 最小,Sum 求和:
from jango.db.models import Sum
模型类.objects.aggregate(Sum(game_download))
排序(默认升序,加-为降序)
模型类.objects.all().order_by('game_download')
模型类.objects.all().order_by('-bread')
关联查询
一对多:
g = GameInfo.objects.get(id=1)
g.heroinfo_set.all()
多对一:
h = HeroInfo.objects.get(id=1)
h.hgame
多对一:
h = HeroInfo.objects.get(id=1)
h.hgame_id
关联过滤查询:
模型类.objects.filter(heroinfo__hname='妲己')
模型类.objects.filter(hgame__btitle='王者荣耀')
数据库的修改
save方法
hero = HeroInfo.objects.get(hname='妲己')
hero.hname = '王昭君'
hero.save()
update方法
HeroInfo.objects.filter(hname='妲己').update(hname='王昭君')
数据库的删除
delete方法
hero = HeroInfo.objects.get(id=3)
hero.delete()
模型类.objects.filter().delete()
HeroInfo.objects.filter(id=4).delete()
查询集的两大特性
查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。
1.惰性:创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用
2.缓存:使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。
自定义管理器
修改原始管理器的方法
# 在django_test下的models.py文件中定义类 class GameInfoManager(models.Manager):
def all(self):
return super().filter(is_delete=False) # 在模型类GameInfo中定义管理器
class GameInfo(models.Model):
games = GamesInfoManager() #使用方法
GameInfo.games.all()
在自定义的管理类可以自定义新的方法
Django框架的使用教程--mysql数据库[三]的更多相关文章
- 第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置
Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...
- 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化
第三百零九节,Django框架,models.py模块,数据库操作——F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...
- 第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多、一对一、多对多
第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多.一对一.多对多 链表操作 链表,就是一张表的外键字段,连接另外一张表的主键字段 一对多 models.Forei ...
- 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查
Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...
- Python中的Django框架中prefetch_related()函数对数据库查询的优化
实例的背景说明 假定一个个人信息系统,需要记录系统中各个人的故乡.居住地.以及到过的城市.数据库设计如下: Models.py 内容如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 1 ...
- 四 Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置
Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...
- Web框架之Django-20-基于mysql数据库的连接
Web框架之Django-20-基于mysql数据库的连接 想要连接mysql首先需要安装pymysql这个驱动 然后在app的init文件中引入驱动 import pymysql pym ...
- 五 Django框架,models.py模块,数据库操作——表类容的增删改查
Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...
- Django中的app及mysql数据库篇(ORM操作)
Django常见命令 在Django的使用过程中需要使用命令让Django进行一些操作,例如创建Django项目.启动Django程序.创建新的APP.数据库迁移等. 创建Django项目 一把我们都 ...
随机推荐
- 使用docker-compose快速构建集群示例(一)
一.zookeeper集群 docker-compose文件: version: '3.1' services: zoo1: image: zookeeper hostname: zoo1 conta ...
- 内核知识第六讲,内核编写规范,以及获取GDT表
内核知识第六讲,内核编写规范,以及获取GDT表 一丶内核驱动编写规范 我们都知道,在ring3下,如果我们的程序出错了.那么就崩溃了.但是在ring0下,只要我们的程序崩溃了.那么直接就蓝屏了. 那么 ...
- filter listener interceptor的区别
转自: http://www.cnblogs.com/shangxiaofei/p/5328377.html https://www.cnblogs.com/jinb/p/6915351.html 一 ...
- 深度学习之PyTorch实战(1)——基础学习及搭建环境
最近在学习PyTorch框架,买了一本<深度学习之PyTorch实战计算机视觉>,从学习开始,小编会整理学习笔记,并博客记录,希望自己好好学完这本书,最后能熟练应用此框架. PyTorch ...
- SpringMVC教程2
接上篇文章-SpringMVC教程1 五.基本操作 1.响应请求的方式 1.1ModeAndView /** * 查询方法 * @return */ @RequestMapping("/qu ...
- 【微收藏】FourShadows.js – 时间感知的算法驱动的图标阴影JS库
废话一箩筐,筐筐有心得 不小心养成了一个刷微博的习惯,主要还是关注一些前端人士,学习一些前端方面的知识,看到大家都有一些刷微博的小习惯.有的是转发一下,转发内容来一个标记(MARK).也有评论中标记为 ...
- Web Service 与WebAPI 的区别
Web Servise: web service 是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓跨编程语言和跨操作系统平台,就是说服务器端程序采用Java编写,客户端程序则可以采用其他编程语言 ...
- (3)Jquery1.8.3快速入门_jquery对象dom对象转换
1.Jquery 对象 dom对象的转化使用: 1.1.jquery 对象: 通过$()包装DOM对象后产生的对象. 1.2.jquery对象是Jquery独有的 ,可以使用jquery中的方法. 1 ...
- Centos7 firewalld 基本使用
Centos7 的防火墙 firewalld比较常见 简单介绍使用 详细介绍链接推荐: https://blog.csdn.net/buster_zr/article/details/806049 ...
- Spring容器的初始化流程
一.创建BeanFactory流程 1.流程入口 创建BeanFactory的流程是从refresh方法的第二步开始的,通过调用obtainFreshBeanFactory方法完成流程. Config ...