十.model高级用法:
10.1 ORM映射:
Object Relational Mapping:
orm映射的任务:
将list ,object 的操作转化为sql语句,根据对象生成数据表,将查询对象转换为对象和数据list
减少代码,重构,不需要因为数据库结构变化修改业务代码
模型类对应对应一张表,属性对应模型对应该模型对照表的对应的字段
10.2字段:Field高级用法:
AutoField一个自增整数类型字段,一个模型对照表只允许一个主键且自增字段必须为主键pk
BigAutoField(1.10新增)64位整数类型自增字段,范围更大:1~9223372036854775807
IntegerField 整数类型范围:-2147483648~2147483647
SmallIntegerField小整数,包含[-32768~32767]
BigIntegerField(64位整数字段):范围-9223372036854775808~9223372036854775807
PositiveIntegerField (正整数字段)范围:包含[0~214748364]
PositiveSmallIntegerField较小的正整数字段,从0到32767
BinaryField二进制数据类型,不能使用filter函数获得QuerySet
CharField字符串类型。必须接收一个max_length参数,表示字符串长度不能超过该值,即对模型和数据库层面生效又对前端生效
TextField大量文本内容,适用于前端TextArea 文本框控件:如果你为它设max_length只对前端输入字符数量限制,
不对数据库模型影响
时间字段:
1.TimeField 只作用于小时、分和秒,接收参数同DateField一样的参数HH:MM[:ss[.uuuuuu]]
2.DateFiled : DateField(auto_now=False, auto_now_add=False, **options),datetime.date的实例
3.DateTimeField日期时间类型。Python的datetime.datetime的实例,与DateField相比就是多了小H:M:S的显示
小数:
DecimalField固定精度的十进制小数,接收参数:
models.DecimalField(..., max_digits=5, decimal_places=2)。max_digits整数位数,
FloatField浮点数类型:
必填参数:max_digits,数字长度;decimal_places,有效位数。
GenericIPAddressField(protocol='both', unpack_ipv4=False, **options)IPV4或者IPV6地址,字符串形式,例如192.0.2.30或者2a02:42fe::4
参数protocol默认值为‘both’,也可用‘IPv4’或者‘IPv6’,表示你的IP地址类型
NullBooleanField :支持null True, False
BooleanField :True ,False
URLField一个用于保存URL地址的字符串类型,默认最大长度200
UUIDField: 在PostgreSQL数据库中保存为uuid类型,其它数据库中为char(32)。这个字段是自增主键的最佳替代品
EmailField邮箱类型,默认max_length最大长度254位
SlugField:减号、下划线、字母、数字
ImageField:.height_field、width_field,提供这两个参数,则图片将按提供的高度和宽度规格保存
文件字段:
FileField: FileField(upload_to=None[, max_length=100, ** options]),
upload_to:一个用于保存上传文件的本地文件系统路径,该路径由 MEDIA_ROOT 中设置,
这个字段不能设置primary_key和unique选项.在数据库中存储类型是varchar,默认最大长度为100
FilePathField:
FilePathField(path=None[, math=None, recursive=False, max_length=100, **options])
path:文件的绝对路径,必填
match:用于过滤路径下文件名的正则表达式,该表达式将用在文件名上(不包括路径
recursive:True 或 False,默认为 False,指定是否应包括所有子目录的路径
字段常用参数:
null=False数据库中允许此字段的值置为NULL,默认值是False
blank =False,允许为空什么都不填,默认False,null纯粹是与数据库有关系的。而blank是与页面必填项验证有关的
primary_key = False ,设置该属性为主键字段列
choices:CHIOCE_LIST=[('m','man),('f',woman)] choices:CHIOCE_LIST=[('m','man),('f',woman)]
max_length
default=默认值
verbose_name eignKey、ManyToManyField和OneToOneField需要通过Field.verbose_name才能自定义设置字段名
db_column="define_col_name" 数据库字段名称设置自定义别名
unique=True  表示此表该字段不允许重复
db_index = True  数据库创建索引
editable=True  admin里可编辑
error_messages=None  错误提示
help_text   提示信息
validators=[] 验证器
upload-to 文件上传后保存文件的具体路径 十一.Meta元属性,以及自定义模型管理类
11.1Meta 元属性:
db_table="app_grade" 表名称
ordering=["grade_id"] 查询排序规则支持多个字段进行先后顺序排列
自定义管理模型类:
第一步:继承Manager原始管理类
第二步: 重写get_queryset方法
class GradeManager(models.Manager):
"""重写get_queryset"""
def get_queryset(self):
return super(GradeManager,self).get_queryset().filter(grade_good=90) 11.2创建对象:
1.目的数据库添加数据
2.创建对象之前不会进行数据保存操作,只有在save()时才与数据库交互,将数据存储到数据库
3.创建对象的方法:
a.在模型类里面创建一个创建对象的类方法实现数据创建
b.在类对应的模型管理器中创建一个实例方法管理对象:
class StudentManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(k1=v1, k2=v2).order_by("column").values() class Student(models.Model):
mydef_obj=GradeManager()
# class.attr.func()
11.3数据查询和过滤器,排序
In [1]: from app.models import Grade
In [2]: Grade.mydef_obj.all()
<QuerySet [{'grade_id': 1004, 'grade_good': 8888, 'grade_bad': 88, 'is_delete': False}, {'grade_id': 1003, 'grade_good': 774, 'grade_bad': 4444, 'is_delete': False}, {'grade_id': 1002, 'grade_good': 90, 'grade_bad': 10, 'is_delete': False}, {'grade_id': 1001, 'grade_good': 80, 'grade_bad': 60, 'is_delete': False}]>
Out[2]: <QuerySet [{'grade_id': 1004, 'grade_good': 8888, 'grade_bad': 88, 'is_delete': False}, {'grade_id': 1003, 'grade_good': 774, 'grade_bad': 4444, 'is_delete': False}, {'grade_id': 1002, 'grade_good': 90, 'grade_bad': 10, 'is_delete': False}, {'grade_id': 1001, 'grade_good': 80, 'grade_bad': 60, 'is_delete': False}]> 相当于where 查询字段:方法filter <==> = ,exclude <==> != ,get 等等:
用法包括:
exact:精确匹配。区分大小写
Entry.objects.get(id__exact=14)
Entry.objects.get(id__exact=None)
iexact:不区分大小写的精确匹配
Entry.objects.filter(blog=b).delete()
Entry.objects.filter(pub_date__year=2010).update(comments_on=False)
exact like 区分大小写精确匹配查询相当于 =
contains ,icontains 包含 也是like 效果
startswith endswith ,istartswith iendswith
in
lt 小于 <
lte <=
gt >
gte >=
isnull isnotnull=True
__range 在…范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
外键字段查询,比较特殊查询需要属性名称_id查询
举例:
1.Student.mydef_obj.fliter(user_name__icontains="亚索")
2.Student.mydef_obj.get(stu_id__lt=1002)
3.Grade.mydef_obj.exclude(grade_id_id=1001) #外键 F,Q对象:
from django.db.models import Q F对象主要以用来比较字段A与字段B关系,Q对象用来进行或,与,非关系的判断
举例:
sql: select id from tb where startTime< endTime ;
F对象实现:Student.mydef_obj.filter(startTime__lt=F('endTime'))
Q对象:
sql: select id from tb where name='zh' and id ='1001';
Student.mydef_obj.filter(Q(name__exact='zh')& Q(startDate__lt=F('endDate')) Q(属性名__运算符=值) & Q(属性名__运算符=值) ==> and
Q(属性名__运算符=值) | Q(属性名__运算符=值) ==> or
~Q(属性名__运算符=值) ==> not
聚合函数:
使用aggregate()过滤器调用聚合函数,聚合函数包括:Avg,Count,Max,Min,Sum,被定义在django.db.models中。
from django.db.models import Sum,Avg,Count,Max,Min
举例:
Grade_Info.objects.aggregate(Sum('server_id'))

  

django model 高级进阶的更多相关文章

  1. Django笔记 —— 模型高级进阶

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  2. Django笔记 —— 模板高级进阶

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  3. Django model select的各种用法详解

    <Django model update的各种用法介绍>文章介绍了Django model的各种update操作,这篇文章就是她的姊妹篇,详细介绍Django model select的用 ...

  4. Django Model基础操作

    关于设计django model django为我们集成了ORM对数据库进行操作,我们只需要进行定义model,django就会自动为我们创建表,以及表之间的关联关系 创建好一个django项目-首先 ...

  5. Django笔记 —— 高级视图和URL配置

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  6. 【python】-- Django ORM(进阶)

    Django ORM(进阶) 上一篇博文简述了Django ORM的单表操作,在本篇博文中主要简述Django ORM的连表操作. 一.一对多:models.ForeignKey() 应用场景:当一张 ...

  7. Django (五) modeld进阶

    day 05 models进阶 1.models基本操作   django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表. 对于ORM框架里: 我们写的类表示数据库的表 ...

  8. Django model总结(上)

    Django model是django框架中处于比较核心的一个部位,准备分三个博客从不同的方面分别进行阐述,本文为<上篇>,主要对[a]Model的基本流程,比如它的创建,迁移等:默认行为 ...

  9. 【转】Django Model field reference学习总结

    Django Model field reference学习总结(一) 本文档包含所有字段选项(field options)的内部细节和Django已经提供的field types. Field 选项 ...

随机推荐

  1. Spring框架详解介绍-基本使用方法

    1.Spring框架-控制反转(IOC) 2.Spring框架-面向切面编程(AOP) 3.Spring 内置的JdbcTemplate(Spring-JDBC) Spring框架-控制反转(IOC) ...

  2. C# 获取当前登录IP

    public static string GetUserIp() { string ip; string[] temp; bool isErr = false; if (System.Web.Http ...

  3. 使用wsgiref手撸web框架

    模板 前言 要说到应用程序,就不得不提的就是cs架构和BS架构 所谓的cs架构就是client端和server端,就像我们的电脑上的qq,微信等应用程序 bs架构就是浏览器端和server端,我们不需 ...

  4. django 版本 对应pyhton版本

    对应关系

  5. SQLServer导出查询结果带表头(标题行)

    SQLServer导出查询结果带表头(标题行) 平时我们经常会需要将SQLSERVER查询的结果复制到EXCEL文档中进行分析处理,但是有一件事很头痛,就是复制结果网格的数据到EXCEL之后,都是没有 ...

  6. NW.js桌面应用开发(一)

    NWjs中文网 Electron中文网 一些需要了解的历史与特性,其实就是 NW.js 和 Electron的争议,建议还是亲自阅读一下各自的官网说明 1.下载SDK版工具 从淘宝NPM镜像下载,速度 ...

  7. Android Studio的第一次运行

    一.开发软件的下载 下载教程 https://blog.csdn.net/bzlj2912009596/article/details/87280191 下载地址 http://www.android ...

  8. win10下安装es

    1.安装前提 windows下已经安装好了jdk8的版本 2.下载ElasticSearch https://www.elastic.co/cn/downloads/elasticsearch#ga- ...

  9. python skimage库的安装

    skimage库需要依赖 numpy+mkl 和scipy 1.打开运行,输入cmd回车,输入python回车,查看python版本

  10. 看端口是否被占用的python脚本

    在创建 tcp server 的时候,首先检测端口是否被占用. 代码如下: ----------------------------------------import socketdef net_i ...