Django----模型----数据库的基本操作
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----模型----数据库的基本操作的更多相关文章
- django模型——数据库(二)
模型--数据库(二) 实验简介 模型的一些基本操作,save方法用于把对象写入到数据库,objects是模型的管理器,可以使用它的delete.filter.all.order_by和update等函 ...
- Django模型-数据库操作
前言 前边记录的URLconf和Django模板全都是介绍页面展示的东西,也就是表现层的内容.由于Python先天具备简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站. 这篇开 ...
- python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
python Django教程 之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码 ...
- Django 模型(数据库)
Django 模型(数据库) ) email = models.EmailField() memo = models.TextField() def __unico ...
- Django 模型(数据库)-cmd下的操作
Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py ...
- Django框架:2、静态文件配置、form表单、request对象、pycharm链接数据库、django链接数据库、ORM框架
Django框架 目录 Django框架 一.静态文件配置 1.静态文件 2.配置方法 二.form表单 1.action属性 2.method属性 三.request对象 1.基本用法 四.pych ...
- Django模型层Meta内部类详解
Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract 这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会对应 ...
- django 操作数据库--orm(object relation mapping)---models
思想 django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). PHP:activerecord Java:Hibernate C#:Ent ...
- django模型
用django时,只要用到数据库就得用到模型. 一.数据库的MTV开发模式 从MVC到MTV 所谓软件架构的MVC模式将数据的存取逻辑(Module),表现逻辑(View)和业务逻辑(Controll ...
- 【Python】django模型models的外键关联使用
Python 2.7.10,django 1.8.6 外键关联:http://www.bubuko.com/infodetail-618303.html 字段属性:http://www.cnblogs ...
随机推荐
- 发送邮件时,报错:AttributeError: 'list' object has no attribute 'encode'
在使用腾讯企业邮箱发送邮件时出现报错:AttributeError: 'list' object has no attribute 'encode' 原因:收件人不能用列表存储数据,需要转为字符串,以 ...
- 使用Python-psycopg访问postgres、openGauss、MogDB
摘要 Psycopg 是一种用于执行 SQL 语句的 PythonAPI,可以为 PostgreSQL.GaussDB 数据库提供统一访问接口,应用程序可基于它进行数据操作.Psycopg2 是对 l ...
- Mysql之SQL语句初级用法
前言 本文通过简单的示例去了解Mysql的DDL.DML.DCL的语句用法. 一.DDL语句 DDL(Data Definition Language)语句: 数据定义语言,主要是进行定义/改变表的结 ...
- 2款Notepad++平替工具(实用、跨平台的文本编辑器)
前言 今天大姚给大家分享2款Notepad++平替工具,实用.跨平台(支持Window/MacOS/Linux操作系统平台)的文本编辑器. NotepadNext NotepadNext是一个跨平台的 ...
- Mysql系列:Mysql5.7编译安装--系统环境:Centos7 / CentOS9 Stream
Mysql系列:Mysql5.7编译安装 系统环境:Centos7 / CentOS9 Stream 1:下载mysql源码包 https://dev.mysql.com/downloads/mysq ...
- js 闭包(新)
前言 旧的没有搬过来,先写一下新的感悟. 正文 ECMAScript中,闭包指的是: 从理论角度:所有的函数.因为它们都在创建的时候就将上层上下文的数据保存起来了.哪怕是简单的全局变量也是如此,因为函 ...
- linux 忘记密码怎么破?
前言 适合硬件在自己旁边的,不适合云服务器,云服务器很方便的,可以直接重置密码,因为云服务器都是虚拟机. 正文 1.步骤 进入到可以看到节目的视图,按下esc键进入下面的视图! 2.接着进入下面的界面 ...
- KubeDL HostNetwork:加速分布式训练通信效率
简介:ubeDL 为分布式训练作业带来了 HostNetwork 网络模式,支持计算节点之间通过宿主机网络相互通信以提升网络性能,同时适应 RDMA/SCC 等新型高性能数据中心架构的网络环境,此外 ...
- 好代码实践:基于Redis的轻量级分布式均衡消费队列
简介: 好代码,给人第一个印象的感觉,就像一篇好文章一样,读起来朗朗上口.不同的文章有不同的风格体裁,不同的代码也有不同的编程风格要求.Python有严格的缩进,像诗歌一样工整对仗:C语言面向过程像散 ...
- Cloudera CDP 企业数据云测试开通指导
简介:基于阿里云部署的 Cloudera CDP 企业数据云平台已经进入公测阶段,本文详细介绍了相关试用/试用流程. 基于阿里云部署的 Cloudera CDP 企业数据云平台已经进入公测阶段,如对 ...