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. 2021年大数据HBase(十一):Apache Phoenix的视图操作
  2. ios xib 四等分_ios Xib的几种用法[转]
  3. jackson中JSON字符串节点遍历和修改
  4. python软件安装步骤-Linux中Python 环境软件包安装步骤
  5. vsc提示只有一行_Solution:连续调用BAPI出错,以及BAPI提示成功但数据库没有数据...
  6. boost::pfr模块ops相关的测试程序
  7. 原生js实现京东商城楼梯效果
  8. Zookeeper基础常用操作以及ACL权限
  9. 编辑距离(信息学奥赛一本通-T1276)
  10. Spring框架入门:(非原著,转载)
  11. 基于python的数据管理系统的设计_基于Python的自然语言数据处理系统的设计与实现...
  12. 音频知识之OGG格式分析
  13. 单例模式【饿汉模式和懒汉模式异同点】
  14. 简述三级管开关的导通条件
  15. Open Set Domain Adaptation by Backpropagation
  16. 人工智能AI学习路线01-AI概念
  17. 怎么在电脑上创建一个虚拟机
  18. 大唐芙蓉园-莫安迪摄影作品
  19. win10 + ubuntu双系统及20系显卡驱动安装
  20. Java Web编程

热门文章

  1. XCTF-MISC进阶
  2. iOS---GPUImage研究:内置滤镜解析
  3. 蓝桥ROS之f1tenth简单PID沿墙跑起来(Python)
  4. Python数据分析之单变量分析
  5. JS常用工具函数-中文按拼音排序
  6. 适合arm的linux系统下载,深度操作系统提供有ARM版:Deepin 15 ARM介绍
  7. 微型计算机与接口技术总结,微型计算机与接口技术教程
  8. android 版本升级8.0,安卓系统怎么升级8.0版本 Android O正式版更新教程
  9. [转载]谷歌地图下载
  10. 美研制自我复制机器人 10年内吞噬所有沙漠