今日内容:

常见字断  ,查询优化 ,事务 ,图书管理系统

1.常见字段

    AutoField()    int primary key auto_incrementCharField()    varchar()IntegerField()   int()big....            EmailField()    varchar(254)DateField()      dateDateTimeField()        datetimeauto_now:每次修改数据都会更新时间auto_now_add:只在第一次创建数据的时候才会更新一次

注意:

    BooleanField(Field)is_delete = BooleanField()给该字段传值的时候 你只需要传布尔值即可但是对应到数据库  它存的是0和1TextField(Field)- 文本类型用来存大段文本FileField(Field)- 字符串,路径保存在数据库,文件上传到指定目录- 参数:upload_to = ""         用户上传的文件会自动放到等号后面指定的文件路径中storage = None      存储组件,默认django.core.files.storage.FileSystemStorage

我们也可以自定义字段:

django虽然没有给你提供定义char字段的方法 但是给你暴露一个接口 用户可以自定义char字段
    自定义char字段class MyChar(models.Field):def __init__(self,max_length,*args,**kwargs):self.max_length = max_lengthsuper().__init__(max_length=max_length,*args,**kwargs)def db_type(self, connection):return 'char(%s)'%self.max_length

外键字段:

    外键字段当你在使用django2.X版本的时候 在建立外键关系时(*****)需要你手动添加几个关键点参数models.cascadedb_constraints

数据库优化查询(面试可能会问到):

数据库查询优化:
2个关键参数:only与defer"""数据库查询优化"""# orm内所有的语句操作 都是惰性查询:只会在你真正需要数据的时候才会走数据库,如果你单单只写orm语句时不会走数据库的# 这样设计的好处 在于 减轻数据库的压力

only:只走一次数据库查询# 当你点击一个不是only括号内指定的字段的时候 不会报错 而是会频繁的走数据库查询

defer:# defer与only是相反的
defer会将不是括号内的所有的字段信息 全部查询出来封装对象中
一旦你点击了括号内的字段  那么会频繁的走数据库查询

详细代码:

 1 数据库查询优化
 2     only与defer
 3
 4     select_releated与prefect_releated
 5
 6     """数据库查询优化"""
 7         # orm内所有的语句操作 都是惰性查询:只会在你真正需要数据的时候才会走数据库,如果你单单只写orm语句时不会走数据库的
 8         # 这样设计的好处 在于 减轻数据库的压力
 9
10         # res = models.Book.objects.all()
11         # print(res)
12
13         # res = models.Book.objects.values('title')
14         # # print(res)
15         # for r in res:
16         #     print(r.title)
17
18         # res = models.Book.objects.only('title')
19         # # print(res)
20         # for r in res:
21         #     # print(r.title)  # 只走一次数据库查询
22         #     print(r.price)  # 当你点击一个不是only括号内指定的字段的时候 不会报错 而是会频繁的走数据库查询
23
24         # res1 = models.Book.objects.defer('title')  # defer与only是相反的
25         # for r in res1:  # defer会将不是括号内的所有的字段信息 全部查询出来封装对象中
26         #     # 一旦你点击了括号内的字段  那么会频繁的走数据库查询
27         #     print(r.price)

View Code

select_related与prefetch_related(也是查询优化):

 1         # select_related与prefetch_related
 2         # select_related帮你直接连表操作 查询数据   括号内只能放外键字段
 3         # res = models.Book.objects.all().select_related('publish')
 4         # for r in res:
 5         #     print(r.publish.name)
 6         # res = models.Book.objects.all().select_related('publish__xxx__yyy__ttt')
 7         # print(res)
 8         # res = models.Book.objects.all()
 9         """
10         select_related:会将括号内外键字段所关联的那张表  直接全部拿过来(可以一次性拿多张表)跟当前表拼接操作
11         从而降低你跨表查询 数据库的压力
12
13         注意select_related括号只能放外键字段(一对一和一对多)
14          res = models.Book.objects.all().select_related('外键字段1__外键字段2__外键字段3__外键字段4')
15         """
16         # prefetch_related  不主动连表
17         res = models.Book.objects.prefetch_related('publish')
18         """
19         不主动连表操作(但是内部给你的感觉像是连表操作了)  而是将book表中的publish全部拿出来  在取publish表中将id对应的所有的数据取出
20         res = models.Book.objects.prefetch_related('publish')
21         括号内有几个外键字段 就会走几次数据库查询操作
22         """
23         for r in res:
24             print(r.publish.name)

View Code

事务:

事务ACID原子性一致性隔离性持久性from django.db import transactionwith transaction.atomic():"""数据库操作在该代码块中书写的操作 同属于一个事务"""models.Book.objects.create()models.Publish.objects.create()# 添加书籍和出版社 就是同一个事务 要么一起成功要么一起失败print('出了 代码块 事务就结束')

转载于:https://www.cnblogs.com/zahngyu/p/11558456.html

django框架 day06相关推荐

  1. Django框架之第二篇

    Django框架之第二篇 一.知识点回顾 1.MTV模型 model:模型,和数据库相关的 template:模板,存放html文件,模板语法(目的是将变量如何巧妙的嵌入到HTML页面中). view ...

  2. Windows上python开发--2安装django框架

    Windows上python开发--2安装django框架 分类: 服务器后台开发2014-05-17 21:22 2310人阅读 评论(2) 收藏 举报 python django 上一篇文章中讲了 ...

  3. Python技术学习之Django框架设计思想

    Python是目前比较流行的计算机编程语言,据用丰富和强大的库,被称为胶水语言,能够把用其他语言制作的各种模块很轻松地联结在一起. Python功能强大,用途广泛,可广泛应用于云计算.web开发.科学 ...

  4. django框架使用mysql报错,及两种解决方法

    1.django框架 settings.py文件中部分代码: DATABASES = {# 'default': {# 'ENGINE': 'django.db.backends.sqlite3',# ...

  5. django框架--路由系统

    目录 一.路由系统理解 二.路由系统功能划分 三.路由表创建 创建工具 二级路由 路由别名 动态路由及重定向 四.自定义错误页面 五.图示路由系统在框架中的定位 六.路由系统的进阶想法 一.路由系统理 ...

  6. Python3搭建Django框架浅析

    前言 Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django 是一个开放源代码的 Web 应用框架,由 Pyt ...

  7. Django框架学习索引

    索引目录 1.Django介绍与安装 2.Django流程及模式 3.Django基本配置 4.Django模板(Templages) 1.Django的介绍和安装 3.Django框架模式 4.数据 ...

  8. Django 框架入门篇(安装与创建项目)

    什么是Django框架? 官方定义:Django是一个高级Python Web框架,鼓励快速开发和简洁实用的设计.它由经验丰富的开发人员构建,可以解决大部分Web开发的麻烦,因此您可以专注于编写应用程 ...

  9. 第九章 Django框架——csrf请求伪造和csrf_token使用

    第九章 Django框架--csrf请求伪造和csrf_token使用 一.csrf请求伪造 二.csrf_token使用 三.简单的csrf_token应用 四.Ajax使用csrf_token 一 ...

最新文章

  1. oracle9i.rar下载
  2. CoreAnimation动画
  3. 深度学习还不能解决什么问题?
  4. 女儿问了我一个问题:什么是抽象?
  5. vector邻接表建图+DFS+BFS
  6. 通向架构师的道路(第二天)之apache tomcat https应用
  7. Makefile的介绍与使用
  8. php cdr,win10彻底禁止cdr联网
  9. San 3.7.4 发布,百度开源的 MVVM 组件框架
  10. google android ui,UI Automator
  11. oracle中update补空格lpad,Oracle lpad 函数
  12. 腾讯云短信发送api(SendSms)--java
  13. mysql实现axure协同工作_AxureUX CRM及协同办公APP高保真原型模板(带移动端实用元件库)...
  14. 宽凳公司关于无人驾驶高精地图的看法(2018.8)
  15. Android仿人人客户端(v5.7.1)——新鲜事之分享照片
  16. 携手聚力 共赢数智未来丨物通博联招募生态合作伙伴
  17. 贝尔曼-福特算法(Bellman-Ford)
  18. win11 安装Subversion与配置 svn服务端
  19. 【Redis】(二)Redis命令大全(速记)
  20. 【疫情分析--数据采集】

热门文章

  1. 单进程epoll版-TCP服务器(python 版)
  2. Python操作数据库(二)
  3. oracle中表空间详解
  4. vue复选框默认被选中_vue .js绑定checkbox并获取、改变选中状态的实例
  5. Pytorch 之autograd
  6. Matlab--m代码转C与C++代码)2(详尽示例与描述)
  7. 单应性矩阵的相关理解
  8. VS2008下直接安装使用Boost库1 46 1版本
  9. 设计模式学习笔记——模板(Template)模式
  10. 表格中复制后出现空格_软件应用在Excel表格中怎样批量删除空格?