这几天重新学习了一下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单表查询的更多相关文章

  1. python 之 Django框架(orm单表查询、orm多表查询、聚合查询、分组查询、F查询、 Q查询、事务、Django ORM执行原生SQL)

    12.329 orm单表查询 import os if __name__ == '__main__': # 指定当前py脚本需要加载的Django项目配置信息 os.environ.setdefaul ...

  2. ORM单表查询,跨表查询,分组查询

    ORM单表查询,跨表查询,分组查询   单表查询之下划线 models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值models ...

  3. Django 模版语法 测试环境 ORM单表查询

    模版语法 传值 视图函数向前端html页面传值,基本上所有的数据类型都可以渲染在前端页面上. views.py from django.shortcuts import render, redirec ...

  4. Django【第6篇】:Django之ORM单表操作(增删改查)

    django之数据库表的单表查询 一.添加表记录 对于单表有两种方式 # 添加数据的两种方式 # 方式一:实例化对象就是一条表记录 Frank_obj = models.Student(name =& ...

  5. orm单表查询和模糊查询

    一.单表查询 1. 返回queryset对象的查询 all() 以列表形式返回全部queryset对象 filter(**kwargs) 筛选 exclude(**kwargs) 排除 reverse ...

  6. 057.Python前端Django模型ORM多表查询

    一 基于对象的查询 1.1 一对多查询 设计路由 from django.contrib import admin from django.urls import path from app01 im ...

  7. Django ORM单表查询必会13条

    必知必会13条 操作下面的操作之前,我们实现创建好了数据表,这里主要演示下面的操作,不再细讲创建准备过程 <1> all(): 查询所有结果 <2> filter(**kwar ...

  8. Django(ORM单表操作)

    默认使用sqllite数据库 修改为mysql数据库 创建数据库 在app models中编写创建数据库类 from django.db import models class Book(models ...

  9. Django框架ORM单表删除表记录_模型层

    此方法依赖的表是之前创建的过的一张表 参考链接:https://www.cnblogs.com/apollo1616/p/9840354.html 1.删除方法就是delete(),它运行时立即删除对 ...

随机推荐

  1. 无法获得VMCI驱动程序的版本:句柄无效 (亲测有效! )

    今天在学习Linux 的时候 启动VM时出现了这个问题, 搞了很久终于弄好了, 就写篇博客来记录一下,帮助一下大家,如果对大家有帮助,还请各位哥哥姐姐点个关注,你的支持就是我坚持下去的动力 ! 文章目 ...

  2. C#未能找到类型或命名空间名称xxxxxx的可能原因

    常见原因 原因:使用的.NET版本不一样 今天又被这问题撞上了,结果神奇般的解决了 谷歌了很久都没有找到真正有用的解决方案,所以在这儿写下,让更多的人看到 最根本的原因其实就是引用的问题,引用错了,然 ...

  3. Android 音视频开发(一):PCM 格式音频的播放与采集

    什么是 PCM 格式 声音从模拟信号转化为数字信号的技术,经过采样.量化.编码三个过程将模拟信号数字化. 采样 顾名思义,对模拟信号采集样本,该过程是从时间上对信号进行数字化,例如每秒采集 44100 ...

  4. Java发送企业微信应用消息

    1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接收到消息后,再 ...

  5. Sentinel滑动窗口算法

    在前面搞清楚了Sentinel的使用后,大致理了一下Sentinel的责任链,搞清楚了这个,基本就已经梳理清楚sentinel-core模块的大部分内容,顺着这条链路可以继续梳理很多东西. 知其然.知 ...

  6. Spring Boot Starters

    Spring Boot Starters 摘自 https://www.nosuchfield.com/2017/10/15/Spring-Boot-Starters/ 2017-10-15 Spri ...

  7. 二进制格式mysql

    1.二进制MySQL安装 #下载二进制格式的mysql软件包 wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.31- ...

  8. 介绍一个新库: Norns.Urd.HttpClient

    Norns.Urd.HttpClient Norns.Urd.HttpClient 基于AOP框架 Norns.Urd实现, 是对 System.Net.Http下的 HttpClient封装,让大家 ...

  9. Redis 设计与实现 9:五大数据类型之集合

    集合对象的编码有两种:intset 和 hashtable 编码一:intset intset 的结构 整数集合 intset 是集合底层的实现之一,从名字就可以看出,这是专门为整数提供的集合类型. ...

  10. ES6 for of循环, 可迭代接口,实现可迭代接口

    在for of循环出现之前,for循环适合遍历普通的数组,for in循环比较适合遍历键值对,遍历数组对象的foreach方法,但是这些遍历 都有一定的局限性,所以在ES6之后引入了统一的遍历方式 f ...