1、添加记录

方式一:save()

方式二(推荐):create()

2、查询记录

(1)all()

查询所有记录,返回queryset对象。
stu_list = Student.objects.all()

(2)filter()

查询符合条件的对象,返回queryset对象。
stu_list = Student.objects.filter(name = "yuan",age = 22)

(3)get()

返回与所给筛选条件相匹配的对象,返回结果有且只有一个, 如果符合筛选条件的对象超过一个或者没有都会抛出错误。返回模型类对象。

student = Student.objects.get(pk=104)

  

(4)first() 和 last()

分别为查询集的第一条记录和最后一条记录,返回模型类对象。
# 没有结果返回none,如果有多个结果,则返回模型对象 student = Student.objects.filter(name="刘德华").first()

  

(5)order_by()

对查询结果排序,返回queryset对象

# order_by("字段")  # 按指定字段正序显示,相当于 asc  从小到大
# order_by("-字段") # 按字段倒序排列,相当于 desc 从大到小
# order_by("第一排序","第二排序",...)

  

student_list = Student.objects.filter(classmate="301").order_by("-age").all()
student_list = Student.objects.filter(classmate="301").order_by("age").all() #正序
student_list = Student.objects.filter(classmate="301").order_by("-age","id").all() # 年龄倒序,年龄一致按id进行正序

  

(6)exclude()

筛选条件不匹配的对象

(7)count()

查询集中对象的个数,计数

ret = Student.objects.filter(classmate="301").count()

  

(8)exists()

判断查询集中是否有数据,如果有则返回True,没有则返回False

(9)values()  /  values_list()

(10)distinct()

去重

(11)contains

说明:如果要包含%无需转义,直接写即可

# 查询姓名包含 华 的学生
Student.objects.filter(name__contains='华')

  

(12)startswith  /  endswith

查询姓名以’文’结尾的学生:
Student.objects.filter(name__endswith='文') 注意: 以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith.

  

(13)isnull

找出所有时间为空的数据:

找出时间不为空的数据:

(14)in

查询编号为1或3或5的学生:
Student.objects.filter(id__in=[1, 3, 5])

  

(15)比较查询

查询编号大于3的学生:
Student.objects.filter(id__gt=3)

(16)日期查询

year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算:

(17)F 查询

之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢? 答:使用F对象,被定义在django.db.models中。

语法:

"""F对象:2个字段的值比较"""
from django.db.models import F
# SQL: select * from db_student where created_time=updated_time;
student_list = Student.objects.filter(created_time=F("updated_time"))

  

(18)Q 查询

查询年龄大于20,并且编号小于30的学生:
Student.objects.filter(age__gt=20,id__lt=30) 或: Student.objects.filter(age__gt=20).filter(id__lt=30)

  

如果需要实现逻辑或or的查询,需要使用Q()对象结合|运算符,Q对象被义在django.db.models中。
语法:
Q(属性名__运算符=值)
Q(属性名__运算符=值) | Q(属性名__运算符=值)

  

查询年龄小于19或者大于20的学生,使用Q对象如下:
from django.db.models import Q student_list = Student.objects.filter( Q(age__lt=19) | Q(age__gt=20) ).all()

  

Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或
查询年龄大于20,或编号小于30的学生,只能使用Q对象实现:
Student.objects.filter(Q(age__gt=20) | Q(pk__lt=30))

  

Q对象左边可以使用~操作符,表示非not。
查询编号不等于30的学生:
Student.objects.filter(~Q(pk=30))

  

(19)聚合查询

使用aggregate()过滤器调用聚合函数。

聚合函数包括:Avg 平均,Count 数量,Max 最大,Min 最小,Sum 求和,被定义在django.db.models中。

查询学生的平均年龄:
from django.db.models import Sum,Count,Avg,Max,Min Student.objects.aggregate(Avg('age'))

  

注意:aggregate的返回值是一个字典类型,格式如下:

{'属性名__聚合类小写':值}

(20)分组查询

(21)原生查询

执行原生SQL语句, 直接跳过模型,   用原生pymysql操作

ret = Student.objects.raw("SELECT id,name,age FROM tb_student")  

# student 可以是任意一个模型
# 这样执行获取的结果无法通过QuerySet进行操作读取,只能循环提取 for item in ret:
print(item)

  

3、删除记录

方式1:模型类对象.delete()

student = Student.objects.get(id=13)
student.delete()

  

方式2:模型类.objects.filter().delete()

Student.objects.filter(id=14).delete()

  

4、修改记录

方式1:使用save()保存更新数据

方式2(推荐):update()

使用模型类.objects.filter().update(),会返回受影响的行数

Django----模型----数据库的基本操作的更多相关文章

  1. django模型——数据库(二)

    模型--数据库(二) 实验简介 模型的一些基本操作,save方法用于把对象写入到数据库,objects是模型的管理器,可以使用它的delete.filter.all.order_by和update等函 ...

  2. Django模型-数据库操作

    前言 前边记录的URLconf和Django模板全都是介绍页面展示的东西,也就是表现层的内容.由于Python先天具备简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站. 这篇开 ...

  3. python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API

    python  Django教程  之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码 ...

  4. Django 模型(数据库)

    Django 模型(数据库) )         email = models.EmailField()         memo = models.TextField()   def __unico ...

  5. Django 模型(数据库)-cmd下的操作

    Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py ...

  6. Django框架:2、静态文件配置、form表单、request对象、pycharm链接数据库、django链接数据库、ORM框架

    Django框架 目录 Django框架 一.静态文件配置 1.静态文件 2.配置方法 二.form表单 1.action属性 2.method属性 三.request对象 1.基本用法 四.pych ...

  7. Django模型层Meta内部类详解

    Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract      这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会对应 ...

  8. django 操作数据库--orm(object relation mapping)---models

    思想 django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). PHP:activerecord Java:Hibernate C#:Ent ...

  9. django模型

    用django时,只要用到数据库就得用到模型. 一.数据库的MTV开发模式 从MVC到MTV 所谓软件架构的MVC模式将数据的存取逻辑(Module),表现逻辑(View)和业务逻辑(Controll ...

  10. 【Python】django模型models的外键关联使用

    Python 2.7.10,django 1.8.6 外键关联:http://www.bubuko.com/infodetail-618303.html 字段属性:http://www.cnblogs ...

随机推荐

  1. 将 Github Pages 个人博客录入搜索引擎(以 Bing 为例)

    目录 关于 Bing Webmaster Tools 步骤一:登录 步骤二:添加网站 步骤三:验证网站 步骤四:添加网站地图 验证 & 总结 相关链接 笔者最近准备将 Gitee Pages ...

  2. CentOS 8 安装 oracle 23c CentOS9 Error deal

    1.环境准备 软件准备 序号 软件 下载地址 1 VirtualBox https://www.virtualbox.org/wiki/Downloads 2 CentOS Stream 8 http ...

  3. 我是如何搭建ChatGPT并嵌入到微信公众号的?

    前言 体验方式:薇辛搜索 龚众号 [程序员Jason],关注并点击发消息,点菜单ChatGPT 然后翻到最下面点[阅读原文]就可以了. ChatGPT对某些国家是不提供服务的,所以一般是用不了,除非是 ...

  4. 很强!4.7k star,推荐一款Python工具,可实现自动化操作!!

    1.介绍 在日常工作中,肯定会遇到一些重复性的工作,不管是点击某个按钮.写东西,打印东西,还是复制粘贴拷贝资料之类的,需要进行大量的重复操作.按键精灵大家都听说过,传统的方式,大家可以使用按键精灵将操 ...

  5. BURP保存多个监听器配置

    "感谢您阅读本篇博客!如果您觉得本文对您有所帮助或启发,请不吝点赞和分享给更多的朋友.您的支持是我持续创作的动力,也欢迎留言交流,让我们一起探讨技术,共同成长!谢谢!" 前言 在进 ...

  6. 大型企业数据库服务首选,AliSQL这几大企业级功能你了解几个?

    MySQL代表了开源数据库的快速发展,从2004年前后的Wiki.WordPress等轻量级Web 2.0应用起步,到2010年阿里巴巴在电商及支付场景大规模使用MySQL数据库,再到2012年开始阿 ...

  7. 解决方案|致拓T8数字化ERP

    ​简介:通过快速构建敏捷ERP系统,实现从销售到财务的全流程闭环管理,助力企业数字化升级. 「致拓T8数字化ERP」解决方案聚焦业财一体,助力企业卓有成效地提升经营收益,赋能企业个性化数字生产管理.本 ...

  8. 从MVC到云原生:CBU研发体系演进之路

    简介: 本文对过去十年 CBU 在研发方式和技术架构上的探索做一个简要的回顾总结,以及对未来的展望. 前言 CBU作为集团内最早成立的几个BU之一,有着多年丰富的业务沉淀,而CBU的技术也伴随着业务一 ...

  9. 大数据时代下,App数据隐私安全你真的了解么?

    ​简介:你是否有过这样的经历:你和朋友聊天表达你近期想要购买某件商品,第二天当你打开某购物软件时,平台向你推送的商品正是你想要购买的:或者,你是否接到过陌生来电,他们准确的报出了你的名字和年龄.... ...

  10. WPF 使用 Skia 解析绘制 SVG 图片

    本文告诉大家如何在 WPF 里面,使用 Skia 解析绘制 SVG 图片.本文也适合控制台使用 SkiaSharp 解析绘制 SVG 图片,本文的 WPF 部分只是在 Skia 绘制完成之后,将 Sk ...