django之orm单表查询
这几天重新学习了一下django的orm,以此作为记录来分享。
Part1:修改配置,生成表
在写数据和查数据之前,首先先得把django配置一下,具体配置如下:
1.先在公共项目的settings中配置数据库信息

2.在公共项目的__init__.py文件中导入pymysql并写入一行代码

3.在需要生成表的app的models.py中写生成的表
from django.db import models # Create your models here. class Book(models.Model):
username = models.CharField(max_length=64, unique=True)
email = models.EmailField()
password = models.CharField(max_length=128)
register_date = models.DateTimeField("注册日期", auto_now_add=True)
signature = models.CharField(verbose_name="签名", max_length=128, blank=True, null=True)
num = models.IntegerField(null=True) def __str__(self): return self.username
这3步都完成后,我们就可以通过命令行来创建表了(在项目根目录执行)
1. python manage.py makemigrations
2.python manage.py migrate
执行完以后你就可以去数据库查看一下 表了

红框就是你app名加上类名拼接出来的表名,ok通过django把表建好了,那接下来我们就开始增加数据和查询数据!!!
Part2:新增数据
先在view.py中新增一个视图函数
方式一:
from django.shortcuts import render, HttpResponse
# Create your views here.
from GmTool.models import Book
def single_table(request):
# ---------------------------------------------新增---------------------------------------------#
# 方式一:
book_obj = Book(username='leogao', email='1823231344', password='19961030', register_date='2020-10-30', signature='hh', num=100)
book_obj.save()
return HttpResponse('OK')
此时在浏览器器访问接口,我这边是本地启的服务:http://127.0.0.1:8000/study/orm ,页面会返回一个ok,查看数据库中的GmTool,如下图已成功新增

方式二:
from django.shortcuts import render, HttpResponse
# Create your views here.
from GmTool.models import Book
def single_table(request):
# ---------------------------------------------新增---------------------------------------------#
# 方式二: create返回值就是当前生成的对象记录
book_obj_two = Book.objects.create(username='biyuting', email='18232324544', password='19951030', register_date='2020-10-30', signature='hhh', num=200)
return HttpResponse('OK')
此时在浏览器器访问接口,http://127.0.0.1:8000/study/orm ,页面会返回一个ok,查看数据库中的GmTool,如下图已成功新增

以上两种方法演示了新增数据的方法,接下来我们看下单标查询的一些常用接口
Part3:单表查询
models文件
from django.db import models # Create your models here. class Book(models.Model):
username = models.CharField(max_length=64, unique=True)
email = models.EmailField()
password = models.CharField(max_length=128)
register_date = models.DateTimeField("注册日期", auto_now_add=True)
signature = models.CharField(verbose_name="签名", max_length=128, blank=True, null=True)
num = models.IntegerField(null=True) def __str__(self): return self.username
表中的数据:

1.all方法:将对象中的所有数据都取出来,以QuerySet的格式返回
# (1) all方法
book = Book.objects.all() # 返回的是QuerySet对象 调用的是QuerySet对象
print(book)
for obj in book: # 遍历可以每个对象中的属性
print(obj.email) return HttpResponse('OK')
执行结果:

2.filter方法:过滤,以QuerySet的格式返回
book = Book.objects.filter(username='leogao') # 返回的是QuerySet对象 同样可以遍历哦 调用的是QuerySet对象
print(book)
return HttpResponse('OK')
执行结果:

3.first,last方法:去最后一个值或第一个值,返回的是module对象
book = Book.objects.all().first() # first出来的module可以直接去调对应的属性 last同理
print(book)
book = Book.objects.all().last()
print(book)
return HttpResponse('OK')
执行结果:

4.get 结果只能有且只有一个 返回的是module对象 调用的是QuerySet对象
# (4) get 结果只能有且只有一个 返回的是module对象 调用的是QuerySet对象
book = Book.objects.get(username='leogao') # get出来的module可以直接去调对应的属性
print(book.email)
return HttpResponse('OK')
执行结果:

5.exclude() 过滤!= 调用queryset对象,返回一个queryset对象
book = Book.objects.exclude(email='1823231344')
print(book)
return HttpResponse('OK')
执行结果:

6.order_by() 排序 ,调用queryset对象, 返回一个queryset对象
book = Book.objects.all().order_by('id') # id是正序,-id是倒序 同样可以遍历
print(book)
for obj in book:print(obj.email)
return HttpResponse('OK')
执行结果:

7.reserve() 将排序倒转, 调用queryset对象, 返回一个queryset对象
book = Book.objects.order_by('-id').reverse()
print(book)
return HttpResponse('OK')
执行结果

8.count() 计算queryset中对象的个数 调用queryset对象, 返回一个int
book = Book.objects.all().count()
print(book)
return HttpResponse('OK')
执行结果

9.exist() 查看返回的querysert有没有值 调用queryset对象,返回布尔值
book = Book.objects.all().exists()
print(book)
return HttpResponse('OK')
执行结果

10.values 获取对应字段的值 调用queryset对象, 返回一个queryset对象
book = Book.objects.all().values('email', 'username')
print(book)
return HttpResponse('OK')
执行结果

11.values_list :将value的值放在一个元祖中 调用queryset对象, 返回一个queryset对象
book = Book.objects.all().values_list('password', 'username')
print(book)
return HttpResponse('OK')
执行结果

12.distinct: 将重复的结果去重 调用queryset对象, 返回一个queryset对象 从返回结果中剔除重复结果
book = Book.objects.all().values('email').distinct()
print(book)
return HttpResponse('OK')
执行结果

好了以上就是一些常用的单表查询
如果您觉得好请点赞 谢谢!
django之orm单表查询的更多相关文章
- python 之 Django框架(orm单表查询、orm多表查询、聚合查询、分组查询、F查询、 Q查询、事务、Django ORM执行原生SQL)
12.329 orm单表查询 import os if __name__ == '__main__': # 指定当前py脚本需要加载的Django项目配置信息 os.environ.setdefaul ...
- ORM单表查询,跨表查询,分组查询
ORM单表查询,跨表查询,分组查询 单表查询之下划线 models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值models ...
- Django 模版语法 测试环境 ORM单表查询
模版语法 传值 视图函数向前端html页面传值,基本上所有的数据类型都可以渲染在前端页面上. views.py from django.shortcuts import render, redirec ...
- Django【第6篇】:Django之ORM单表操作(增删改查)
django之数据库表的单表查询 一.添加表记录 对于单表有两种方式 # 添加数据的两种方式 # 方式一:实例化对象就是一条表记录 Frank_obj = models.Student(name =& ...
- orm单表查询和模糊查询
一.单表查询 1. 返回queryset对象的查询 all() 以列表形式返回全部queryset对象 filter(**kwargs) 筛选 exclude(**kwargs) 排除 reverse ...
- 057.Python前端Django模型ORM多表查询
一 基于对象的查询 1.1 一对多查询 设计路由 from django.contrib import admin from django.urls import path from app01 im ...
- Django ORM单表查询必会13条
必知必会13条 操作下面的操作之前,我们实现创建好了数据表,这里主要演示下面的操作,不再细讲创建准备过程 <1> all(): 查询所有结果 <2> filter(**kwar ...
- Django(ORM单表操作)
默认使用sqllite数据库 修改为mysql数据库 创建数据库 在app models中编写创建数据库类 from django.db import models class Book(models ...
- Django框架ORM单表删除表记录_模型层
此方法依赖的表是之前创建的过的一张表 参考链接:https://www.cnblogs.com/apollo1616/p/9840354.html 1.删除方法就是delete(),它运行时立即删除对 ...
随机推荐
- PSO 粒子群算法
注:本人参考http://www.cnblogs.com/tiandsp/category/348031.html来实现的 算法步骤: 1.首先确定粒子个数与迭代次数. 2.对每个粒子随机初始化位置与 ...
- Appium常用的3种元素定位方式
以最右App为例 .apk文件网盘地址: 链接:https://pan.baidu.com/s/1L4MYkhpb5ECe8XeaneTx_Q 提取码:0jqm 1.find_element_by_i ...
- 【Tomcat】Tomcat服务器核心配置说明及标签
目录 一,主要标签结构 二,Server标签 标签属性: 子标签: 三,Service 标签 子标签: 四,Executor 标签 属性: 五,Connector标签 属性: 六,Engine标签 属 ...
- Git提交错了不用慌,这三招帮你修改记录
大家好,今天我们来聊聊git当中一个很重要的功能--历史记录的修改. 有的时候我们会突然发现某个地方需要修改,最常见的某个不应该被提交的文件被提交了进来.我们希望它不只是在后序的版本当中不再出现,而是 ...
- 什么是可变参数?如何创建不可变集合?Steam三类方法是什么?获取流方法特点?流中间方法特点?终结流方法特点?
==知识梳理== ==重难点梳理== ==今日目标== 1.能够了解什么是可变参数 2.能够了解如何去创建不可变集合 3.能够掌握Stream流的使用 ==知识点== 1.可变参数 2.Stream流 ...
- JAVA递归算法及经典递归例子 对于这个汉诺塔问题
前言:递归(recursion):递归满足2个条件 1)有反复执行的过程(调用自身) 2)有跳出反复执行过程的条件(递归出口) 第一题:汉诺塔 对于这个汉诺塔问题,在写递归时,我们只需要确定两个条件: ...
- [leetcode]53Maximum Subarray动态规划经典题目:最大子串问题
/** * Find the contiguous subarray within an array (containing at least one number) * which has the ...
- OpenWRT19.07_命令行_重拨wan_重启路由
OpenWRT19.07_命令行_重拨wan_重启路由 转载注明来源: 本文链接 来自osnosn的博客,写于 2020-10-19. 写OpenWRT的脚本时,需要用到一些重启命令 以下的命令中的参 ...
- [Skill] 记一次vue项目热更新失败案例
病因 修改文件后无法更新界面,感觉留白,没有更新 解决过程 发现问题,第一步搜索别人是怎么解决的 搜索一阵后,发现大部分都是留言路径问题,基本都是组件文件夹大写导致 修改测试后发现问题依旧 然后仔细观 ...
- mysql 连接url中需要添加useUnicode=true&characterEncoding=UTF-8
下面是示例: 数据库中Username是张三 在数据库配置时没有配置编码 useUnicode=true&characterEncoding=UTF-8 导致期望与实际不同 配置useUni ...