文章目录

  • 一、认识ORM
  • 二、模型常用字段类型
  • 三、数据表的增删改查
  • 四、配置日志

一、认识ORM

1、概念:简单来说,就是用面向对象的方式去操作数据库的创建表以及增删改查等操作。

2、ORM的优点

  • ORM使我们的通用数据库交互变得简单易行,完全不用考虑该死的SQL语句,实现快速开发
  • 可以避免一些新手程序猿写SQL语句带来的性能问题

3、表与表之间的关系
表与表之间的关系主要分为:一对一、一对多、多对多

  • 一对一:在主外键(foreign key)的关系基础上,给外键加了属性

一个班级有很多学生,他们分别有不同的学号。一个学生对应一个学号,一个学号对应一个学生;通过学号能找到学生,通过学生也能得到学号,不会重复。这里学生和学号的关系就是一对一

  • 一对多:就是主外键关系(foreign key)

一个班级有很多学生,可是这个班级只有一个班主任。在这个班级中回随便找答一个人,就会知道他们的班主任是谁;知道了这个班主任就会知道有哪几个学生。这里班主任和学生的关系就是一对多。

  • 多对多:自动创建第三张表(当然我们也可以自己创建第三张表:两个foreign key)

一个班级有很多学生,他们有语文课、数学课、英语课等很多课。一门课有很多人上,一个人上很多门课。这里学生和课程的关系就是多对多。

  • 多对一:

比如说一个班级有很多学生,可是这个班级只有一个班主任。在这个班级中随便找一个人,就会知道他们的班主任是谁;知道了这个班主任就会知道有哪几个学生。这里学生和班主任的关系就是多对一。

例如:书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系,也被称作外键。

二、模型常用字段类型

  • CharField:字符串字段, 用于较短的字符串.
    必要参数 maxlength, 用于从数据库层和Django校验层限制该字段所允许的最大字符数

  • IntegerField:用于保存一个整数.

  • FloatField:浮点数,必须的两个参数:
    max_digits——总位数(不包括小数点和符号)
    decimal_places——小数位数

  • BooleanField:A true/false field. admin 用 checkbox 来表示此类字段

  • TextField:一个容量很大的文本字段

  • EmailField:带有检查Email合法性的 CharField,不接受 maxlength 参数

  • DateField:日期字段,有两个非必须参数:
    Argument 描述
    auto_now 当对象被保存时,自动将该字段的值设置为当前时间.通常用于表示 “last-modified” 时间戳

  • ImageField:类似 FileField, 不过要校验上传对象是否是一个合法图片

  • FileField:文件上传字段,要求一个必须有的参数: upload_to

  • URLField: 用于保存 URL. 若 verify_exists 参数为 True (默认), 给定的 URL 会预先检查是否存在( 即URL是否被有效装入),没有返回404响应

三、数据表的增删改查

1、数据表记录的添加

def addbook(request):# 第一种添加方法:实例化一个Book对象# b=Book(name="python进阶",price=199,author="Lin",pub_date="2020-6-29")# b.save()#第二种添加方法:使用createBook.objects.create(name="泽法",price=98,author="okok",pub_date="2019-12-12")#Book.objects.create(**dic)#获取全部前端发来的键值对加入到数据库,前提是键值对的键名与数据表表头字段必须一一对应return HttpResponse("添加成功")

2、数据表记录的修改

def update(request):# 方法一:# 查找到author=“zahuw”,将对应的price改为999Book.objects.filter(author="zahuw").update(price=999)# 方法二(效率低):get取一条记录# b=Book.objects.get(author="zahuw")# b.price=120# b.save()# print(b)#用filter得到的集合就是一个:<QuerySet [<Book: Book object>]>对象集合# print(type(b))return HttpResponse("修改成功!")

3、数据表记录的删除

def delete(req):Book.objects.filter(author="zahuw").delete()return HttpResponse("successfully")

4、数据表的查询

def select(req):# 先获取所有Book对象# book_list=Book.objects.all()# print(book_list)# print(book_list[0])#Book object取第一本书# book_list = Book.objects.filter(id=2) # 取id=2的书的集合(只要是filter就是取一个集合)# book_list = Book.objects.all()[:3]   # 用切片取前三本书# book_list = Book.objects.all()[::2]   # 设置步长为2,隔两本取一本# book_list = Book.objects.all()[::-1]  # 从后往前取# book_list = Book.objects.first()# book_list = Book.objects.last()# book_list = Book.objects.get(id=2)    # 只能取出一个对象# ret1=Book.objects.filter(author="zahuw").values("name")  # 取某个字段的值的键值对集合# ret2=Book.objects.filter(author="zahuw").values_list("name","price")  # 元组的集合# book_list=Book.objects.exclude(author="zahuw").values("name","price")# print(ret1)# print(ret2)# book_list= Book.objects.all().values("name").distinct()  # 去重# book_count= Book.objects.all().values("name").distinct().count()# print(book_count)#万能的双下划线  __:用于模糊匹配# 过滤出price>=50的记录# book_list=Book.objects.filter(price__gt=50).values("name","price")book_list=Book.objects.filter(name__contains="P").values_list("name","price")return render(req,"index.html",{"book_list":book_list})

四、配置日志

每执行一次就会有记录,需要我们在settings.py文件中加入以下代码:

LOGGING = {'version': 1,'disable_existing_loggers': False,'handlers': {'console':{'level':'DEBUG','class':'logging.StreamHandler',},},'loggers': {'django.db.backends': {'handlers': ['console'],'propagate': True,'level':'DEBUG',},}
}

Python框架篇之Django(ORM对象关系映射)相关推荐

  1. orm 对象关系映射

    引用:http://baike.baidu.com/view/197951.htm 对象关系映射(ORM)提供了概念性的.易于理解的模型化数据的方法.ORM方法论基于三个核心原则: 简单:以最基本的形 ...

  2. Python框架篇之Django(Django项目搭建全过程、Web框架与Django)

    文章目录 一.Web框架与Django本质 二.从安装到实现一个完整的Django项目 一.Web框架与Django本质 1.Web框架的理解 框架,特指为解决一个开放性问题而设计的具有一定约束性的支 ...

  3. Python框架篇之Django(Models的多表操作)

    一对多 1.添加记录 #publish_id=2Book.objects.create(name="Python进阶",price=77,pub_date="2019-1 ...

  4. Python框架篇之Django(路由系统URL、视图函数views)

    文章目录 一.路由系统(URL) 二.视图函数(views) 一.路由系统(URL) 1.URL配置 (URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用 ...

  5. Python框架篇之Django(Template基础:模板语法、过滤器filter)

    文章目录 一.Template介绍 二.模板语法 三.过滤器(filter) 一.Template介绍 Python 代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给 ...

  6. Python框架篇之Django(基本流程、命令行、配置文件)

    文章目录 一.总述 二.Django的实现流程 三.django的命令行 四.配置文件(settings) 1.MEDIA_ROOT和MEDIA_URL 2.STATIC_ROOT和STATIC_UR ...

  7. Python框架篇之Django(Models数据表的创建、数据库配置)

    文章目录 一.数据库的配置 二.Models数据表的创建 三.在Pycharm中显示 一.数据库的配置 1. django默认支持 sqlite,mysql, oracle,postgresql数据库 ...

  8. Python框架篇之Django(Template模版:标签tag、自定义filter、extend模板继承)

    文章目录 一.标签的使用(tag) 二.自定义filter和simple_tag 三.extend模板继承 一.标签的使用(tag) 1.语法格式:{% tags %} 2.提供的几种标签 {% if ...

  9. ORM(对象关系映射)

    一.作用 用于实现面向对象编程语言里不同类型系统的数据之间的转换,换言之,就是用面向对象的方式去操作数据库的创建表以及增删改查等操作 二.优缺点 优点: 1.ORM使得我们的通用数据库交互变得简单易行 ...

最新文章

  1. 用 Label 控制 Service 的位置 - 每天5分钟玩转 Docker 容器技术(106)
  2. 深度学习的强大应用,且看如何用神经网络给可爱的圆滚滚们发对象!
  3. 在Elasticsearch中对 text 类型的字段进行聚合异常Fielddata is disabled,Set fielddata=true
  4. 【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )
  5. 单独获取ShopEx商品类型中的扩展参数,如配货时间
  6. Interlocked原子访问系列函数
  7. vsftp虚拟帐户配置
  8. 工作4-5年的.NET开发人员也需要有人带带才可以保证软件项目的质量
  9. WPS2019政府版本
  10. 常见的API接口管理工具
  11. 怎么在WORD里给文字“框”起来,干货在这里,WORD文档中文字加边框的独家教程
  12. “无法为保留分区分配驱动器号”的解决
  13. 纯css实现icon的网站,代码可复制
  14. pandas学习task11综合任务
  15. close函数 qt_QT中的close、closeEvent和析构函数的理解(基础知识)
  16. 夜雪潇潇,飘如落羽,一片片一朵朵
  17. 【CNNVD-201303-018】D-Link DIR-645 Routers 认证绕过漏洞复现
  18. 云原生相关介绍,25 个点很全面
  19. 判断输入数是奇数还是偶数
  20. IDEA配置关联Git

热门文章

  1. PHP地图规划骑行路径,骑行路线规划-路线规划-开发指南-iOS 导航SDK | 高德地图API...
  2. 小程序跳转样式布局错乱_小程序页面布局样式元素总结
  3. Java业务面考什么_Java程序员面试技巧分享,面考官考查JAVA程序员常用的技术有哪些?...
  4. java哈希映射干什么的_java – 为什么在哈希映射中有空值或空键是有用的?
  5. selenium拖动元素java_使用Java在Selenium WebDriver中聚焦元素的正确方法
  6. matlab制作萨克斯音乐,Cmusic Productions SAXBAND Soprano Sax KONTAKT 萨克斯
  7. thymeleaf 基础教程-搭建杂货铺项目环境(一)
  8. Apache POI学习笔记
  9. Jenkins的安装配置
  10. Android自定义控件学习(二)-----自定义attr Style styleable以及其应用