热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Django框架的使用教程mysql数据库[三]

Django的数据库1.在Django_test下的view.py里面model定义模型fromdjango.dbimportmodels#Createyourmodelshere





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.生成迁移文件


Django框架的使用教程--mysql数据库[三]


3.数据库迁移


Django框架的使用教程--mysql数据库[三]


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()


在自定义的管理类可以自定义新的方法


 


 


 




推荐阅读
  • 统计报表模板及其实现方法
    本文介绍两个实用的统计报表模板,并提供如何将这些静态模板转换为动态JSP页面的方法。同时,文中附上了详细的代码示例。 ... [详细]
  • 本文深入探讨了@RequestBody注解的使用场景及核心逻辑,包括其与@RequestParam的区别和结合使用的方法。文章前半部分介绍了基础知识,后半部分则详细分析了源码和重要结论。 ... [详细]
  • 本文详细探讨了JSP环境下数据库连接的实现方法,包括环境配置、代码示例以及常见的连接问题及其解决方案。 ... [详细]
  • 本文详细介绍了在Hive中创建表的基本语法,包括临时表、外部表的创建方法,以及如何设置表的各种属性和约束条件。 ... [详细]
  • 一、数据更新操作DML语法中主要包括两个内容:查询与更新,更新主要包括:增加数据、修改数据、删除数据。其中这些操作是离不开查询的。1、增加数据语法:INSERTINTO表名称[(字 ... [详细]
  • 使用DataGridViewComboBoxColumn实现数据绑定与操作
    本文详细介绍如何在DataGridView中使用DataGridViewComboBoxColumn来加载、选择和保存数据库中的数据,提供具体的实现步骤和示例代码。 ... [详细]
  • 重构:优化现有代码设计(第二版)笔记
    本文介绍了重构的基本概念,通过具体示例展示了如何提炼函数以处理过长的代码段,并探讨了多种重构技术,如分阶段重构、封装变量等。 ... [详细]
  • Buffer.byteLength 方法用于计算给定字符串或数据对象的实际字节长度,支持多种数据类型和编码方式。 ... [详细]
  • 本文探讨了如何利用ES6提供的新功能来更改JavaScript对象中的属性名,特别是当需要将API返回的数据格式化为特定组件所需的格式时。 ... [详细]
  • UnityNGUIScrollView苹果式滑动
    又回来写博客了,这回已经开始上班了,所以就发一发工作中解决的难题吧。单个展示Panel(苹果式)以前对UI的滑动组件很烦心,不是很会用,这回项目要求写一个类似于苹果的文件滑动效果, ... [详细]
  • 实现‘点击恢复’功能 - Tap-to-Resume Feature in SpriteKit
    了解如何在应用程序从非活动状态返回时,在SpriteKit游戏中添加一个‘点击恢复’的文字提示。 ... [详细]
  • LeetCode 648. 使用Trie树实现单词替换
    本问题探讨了如何利用词根(root)概念在英文中构建继承词(successor)。具体来说,通过给定的一系列词根和一个句子,任务是使用词根替换句子中的继承词,以形成一个新的句子。 ... [详细]
  • Node.js中子进程的创建与管理详解
    本文深入探讨了Node.js中如何使用child_process模块来创建和管理子进程,包括exec、spawn和fork三种方法的具体应用及其实现细节。 ... [详细]
  • 本文介绍了如何在 Linux 系统上构建网络路由器,特别关注于使用 Zebra 软件实现动态路由功能。通过具体的案例,展示了如何配置 RIP 和 OSPF 协议,以及如何利用多路由器查看工具(MRLG)监控网络状态。 ... [详细]
  • 首先说一下,这是我在CSDN上的第一个文章,其实这个账号早在几年前就申请了,不过当时只是为了下载一个资源,而且也不怎么懂信息技术相关的领域,后来就再也没怎么动过,直到今天我才开始使用这个账号 ... [详细]
author-avatar
抓尼莫為生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有