热门标签 | 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()


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


 


 


 




推荐阅读
  • Django xAdmin 使用指南(第一部分)
    本文介绍如何在Django项目中集成和使用xAdmin,这是一个增强版的管理界面,提供了比Django默认admin更多的功能。文中详细描述了集成步骤及配置方法。 ... [详细]
  • Django Token 认证详解与 HTTP 401、403 状态码的区别
    本文详细介绍了如何在 Django 中配置和使用 Token 认证,并解释了 HTTP 401 和 HTTP 403 状态码的区别。通过具体的代码示例,帮助开发者理解认证机制及权限控制。 ... [详细]
  • 日志记录对于软件开发至关重要,特别是在调试和维护阶段。通过日志,开发者能够追踪错误源头并了解系统的运行状态。本文将探讨如何在Django框架中有效配置和使用日志记录功能。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 基因组浏览器中的Wig格式解析
    本文详细介绍了Wiggle(Wig)格式及其在基因组浏览器中的应用,涵盖variableStep和fixedStep两种主要格式的特点、适用场景及具体使用方法。同时,还提供了关于数据值和自定义参数的补充信息。 ... [详细]
  • ASP.NET MVC中Area机制的实现与优化
    本文探讨了在ASP.NET MVC框架中,如何通过Area机制有效地组织和管理大规模应用程序的不同功能模块。通过合理的文件夹结构和命名规则,开发人员可以更高效地管理和扩展项目。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 本文详细探讨了 Django 的 ORM(对象关系映射)机制,重点介绍了其如何通过 Python 元类技术实现数据库表与 Python 类的映射。此外,文章还分析了 Django 中各种字段类型的继承结构及其与数据库数据类型的对应关系。 ... [详细]
  • 本文探讨了在Django项目中,如何在对象详情页面添加前后导航链接,以提升用户体验。文章详细描述了遇到的问题及解决方案。 ... [详细]
  • Django 使用slug field时遇到的问题 ... [详细]
  • 1.增加视图函数#Http:127.0.0.1booksdefshow_books(request):booksBookInfo.objects.all()returnrend ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • andr ... [详细]
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社区 版权所有