ex:from django.db import models
'''
功能:1.创建表2.提供模型类,用于上层进行crud操作
'''
# Create your models here.
#需要继承该类,才能完成ORM
'''
#自定义管理器*1.更改默认查询集的查询结果*2.快速插入
'''
class BookInfoManager(models.Manager):def get_queryset(self):return super(BookInfoManager,self).get_queryset().filter(isDelete=0)def create(self,btitle,bpub_date):b = BookInfo()b.btitle = btitleb.bpub_date = bpub_dateb.bread  = 0b.bcommet = 0b.isDelete = 0return b
'''@attention: 这里的create方法是用于快速插入的。
'''
class BookInfo(models.Model):btitle = models.CharField(max_length=20)bpub_date = models.DateTimeField(db_column='pub_date')bread = models.IntegerField(default=0)bcommet = models.IntegerField(default=0)isDelete = models.BooleanField(default=0)class Meta():db_table = 'bookinfo'#BookInfo.objects.all()的返回值:def __str__(self):return self.btitlebooks1 = models.Manager()books2 = BookInfoManager()@classmethoddef create(cls,btitle,bpub_date):b = BookInfo()b.btitle = btitleb.bpub_date = bpub_dateb.bread  = 0b.bcommet = 0b.isDelete = 0return bclass HeroInfo(models.Model):hname = models.CharField(max_length=20)hgender = models.BooleanField(default=0)hcontent = models.CharField(max_length=1000) isDelete = models.BooleanField(default=0)#引用外键,重点记忆hbook = models.ForeignKey(BookInfo)class Meta():db_table = 'heroinfo'#def __str__(self):#    return self.hname我把整个models拿过来进行如下说明:
1.定义模型类时后一定要集成models.Model: ex:class demo(models.Model):
2.字段类型的说明:models.CharField(max_length=20) #定义字符最大长度models.DateTimeField(db_column='pub_date') #定义该域在数据库的名字models.IntegerField(default=0)    #默认值models.BooleanField(default=0) #默认值注:如果需要更改表结构,要做迁移。迁移里面有文件可能会报迁移不成功。
3.元选项在定义的模型类中继续定义类,这个类的名字就是这个,不能变clasee Meta():db_table='bookinfo' #定义表的名字ording = ['id','name'] #按照域排序ording = ['-id']    #降序4.自定义管理器作用有二:1.自定义查询集2.快速插入经常访问的BookInfo.objescts.all(),这里的objects就是默认的管理器,可以通过继承它,构造自定义的管理器ex:#定义管理器类class BookInfoManager(models.Manager):def get_queryset(self):return super(BookInfoManager,self).get_queryset().filter(isDelete=0)def create(self,btitle,bpub_date):b = BookInfo()b.btitle = btitleb.bpub_date = bpub_dateb.bread  = 0b.bcommet = 0b.isDelete = 0return b在BookInfo类中加入如下语句:books1 = models.Manager()books2 = BookInfoManager()这样我们就可以使用BookInfo.books1/books2.all()访问数据。注:管理器是模型类的属性,用于将对象与数据库数据表映射。每个模型类中至少有一个管理器。
5.查询
#返回集合的方法:all() #获取所有数据filter() #表示筛选的查询exclude() #与filter()相对,不满足条件的数据。order_by()values() 对象的值,以对象-字典 最后构成列表的方式返回数据本身。
#返回单个值的方法:get() #括号中可加条件,没有的话报Doesnotexist异常count()first() #括号中可加条件last() #括号中可加条件exists() #不加参数
#限制查询集ex:BookInfo.books1.all()[0:5]注:不能为负
#查询集缓存惰性查询:不迭代的话,不会去数据库拿数据。ex:res = BookInfo.books1.all()for each in res[0:10]:do something等我再去for each in res[0:10]的时候,他已经给你缓存好了。什么情况不缓存:ex:res = BookInfo.books1.all()for each in res[0:10]:do something我再去:for each in res[15:20]时,重新去查询数据库,但不会被缓存。
#字段查询1.相等:exact,一般省略不写Ex:<QuerySet [<BookInfo: 风云>, <BookInfo: 天龙八部1>]>BookInfo.books1.filter(isDelete__exact=0)Out[22]: <QuerySet [<BookInfo: 风云>, <BookInfo: 天龙八部1>]>2.包含:containsEx:BookInfo.books1.filter(btitle__contains='人')Out[23]: <QuerySet [<BookInfo: 人名的名义>]>3.开头/结尾:startswith/endswithEx:<QuerySet [<BookInfo: 人名的名义>]>BookInfo.books1.filter(btitle__endswith='人')Out[25]: <QuerySet []>BookInfo.books1.filter(btitle__endswith='云')Out[26]: <QuerySet [<BookInfo: 风云>]>4.关联查询:相当于inner join,这个比较高端Ex:BookInfo.books1.filter(heroinfo__hname__contains='聂风')Out[27]: <QuerySet [<BookInfo: 风云>]>说明:查询的结果是关联外键的name域包含’聂风‘的书。
#聚合/F/Q对象
1.聚合函数:Sum(),Max(),Min(),Avg(),Count()ex:BookInfo.books1.aggregate(Max('id'))Out[32]: {'id__max': 3}BookInfo.books1.aggregate(Min('id'))Out[33]: {'id__min': 1}from django.db.models import Max,Min,SumBookInfo.books1.aggregate(Sum('id'))Out[35]: {'id__sum': Decimal('6')}注:count就不要用聚合了,直接count()
2.F对象:比较同一个表中不同域的大小关系ex:from django.db.models import Max,Min,F,QBookInfo.books1.filter(id__gte=F('bread'))Out[39]: <QuerySet [<BookInfo: 人名的名义>, <BookInfo: 天龙八部1>]>BookInfo.books1.filter(pk__gte=F('bread'))Out[40]: <QuerySet [<BookInfo: 人名的名义>, <BookInfo: 天龙八部1>]>3.与/或关系:与ex:<QuerySet [<BookInfo: 人名的名义>, <BookInfo: 天龙八部1>]>BookInfo.books1.filter(id__gte=2,btitle__contains='天')Out[46]: <QuerySet [<BookInfo: 天龙八部1>]>或语法格式如下:ex:  BookInfo.books1.filter(Q(id__gte=2)|Q(btitle__contains='风'))Out[48]: <QuerySet [<BookInfo: 风云>, <BookInfo: 人名的名义>, <BookInfo: 天龙八部1>]>

2019/03/26

一些补充

一、django
1.django values()和value_list()区别
    vlaues -
        单条记录 - <class 'dict'>
        多条记录 - <class 'django.db.models.query.QuerySet'>
    vlaues_list -
        单条记录 - <class 'tuple'>
        多条记录 - <class 'django.db.models.query.QuerySet'>
    vlaues_list 返回的是元组列表,默认flat=False,设置flat=True,就是咱们需要的列表格式了。
    上面的flat=True,是以值的数据结构返回,所有注定了flat=True的时候只能指定返回单个字段,如果传递多个字段会出错
        
2.django 查询
    #只记录不常用的,实用的
    reverse():倒序
    distinct():去重(只要结果里面有重复的)
3.django 更新
    第二种方式修改不能用get的原因是:update是QuerySet对象的方法,get返回的是一个model对象,它没有update方法,而filter返回的是QuerySet对象;
    模型的save()方法,会更新一行里的所有列,而某些情况下,我们只需要更新行里的某几列;    #速度慢
    update()返回的是一个整数,表示影响记录的条数

python框架-Django-02-相知.模型相关推荐

  1. python框架django入门_web框架之Django(python3入门)

    -ORM ORM是什么? 不是django独有或者python独有的 对象关系映射 python中主流的几个ORM框架 django的orm(django已经封装好了,必须在django中使用) sq ...

  2. python框架django的使用_Django框架的基本使用,若依框架

    Django框架的基本使用,若依框架 Django框架的基本使用 Django是一个功能强大的web框架 框架模式 1.MVC和MTV框架 MVC:Web服务器开发领域里著名的MVC模式,所谓MVC就 ...

  3. 使用python框架Django搭建web应用

    一.Django简介 1. web框架介绍 具体介绍Django之前,必须先介绍Web框架的概念. Web框架: 别人已经设定好的一个Web网站模板,你学习它的规则,然后"填空"或 ...

  4. python框架django书籍_有Python基础,刚接触web框架的Django初学者。

    本文面向:有Python基础,刚接触web框架的Django初学者. 环境:windows7 python3.5.1 pycharm Django 1.10版 pip3 一.Django简介 百度百科 ...

  5. python框架django文档_Django基础——Django框架介绍及模板语言

    Django框架,我们只需要关心二点: 1.根据用户访问不同的路径执行不同的函数 2.从HTML读取出内容,并且完成字符串的替换 而socket通信不需要我们自己写: 新建Django项目 命令行创建 ...

  6. Python框架Django快速入门

    原文地址:https://simpleisbetterthancomplex.com/series/2017/09/04/a-complete-beginners-guide-to-django-pa ...

  7. python框架Django中MTV框架之VIew(业务控制器)

    MTV框架之VIew(业务控制器) 关注公众号"轻松学编程"了解更多. 1.什么是视图 视图层=路由表(urls.py)+视图函数(views.py) 其角色相当于MVC中的Con ...

  8. python框架django面试问别人什么问你_django面试会问什么

    以下是Django面试中常见的一些问题 对Django的认识? 1.Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及 ...

  9. python框架django的数据库的正向生成和反向生成

    正向生成,指的是先创建model.py文件,然后通过django内置的编译器,在数据库如mysql中创建出符合model.py的表. 反向生成,指的是先在数据库中create table,然后通过dj ...

  10. python框架-Django安装使用

    1.安装pip sudo apt-get install python-pip 遇到问题需要更新下语言包 sudo apt-get update 检查pip是否安装成功 pip -V 查看已安装包 p ...

最新文章

  1. 图解Java 开发教程
  2. MySql 5.7.19 源代码安装 for ubuntu 16.04
  3. warning delete ·· (prettier/prettier)
  4. WPF 基础控件之 GroupBox样式
  5. MySQL查询结果纵向输出标识符\G
  6. PCB中加入logo
  7. [经典控件]按钮和菜单
  8. 中国水性胶粘剂行业市场供需与战略研究报告
  9. MySQL注释(转)
  10. Tensor基本操作
  11. 3S基础知识:MapX应用教程—查询
  12. 单片机超声波测距模块原理与源码解析
  13. 作业一 统计软件简介与数据操作
  14. 2016年世界各国gdp排名 人均gdp排名 人口排名
  15. python调用多个cpp文件_python 如何调用cpp
  16. [恒指赵鑫] 为什么恒指是2019年最火最受欢迎的交易品种?
  17. IText构造PDF文件
  18. IT各大技术经典视频教程大全 一
  19. 可以通过限定ip来限制用户重复登录么_美团和饿了么虽然每天都送红包,但有很大区别...
  20. ASP.NET.MVC登录页面

热门文章

  1. SSM理发店会员管理系统
  2. Python运行报错提示“SyntaxError: Non-ASCII character ‘\xe8‘ in file”
  3. 贱贱的美团安卓客户端---如何实现让安卓app在应用列表获得较靠前的位置
  4. 负数的二进制与十进制转化
  5. 9个GaussDB常用的对象语句
  6. 一文带你快速入门zabbix6.0的日常操作
  7. 除了PRD,你知道BRD、MRD吗
  8. Android系统分析—OTA升级
  9. 西门子S7-200创建和下载程序
  10. 个人网盘行业洞察:5G改变个人网盘行业的催化剂