这几天重新学习了一下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. 302跳转导致的url劫持

    介绍一个   网站监测工具:iis7网站监测IIS7网站监控工具可以做到提前预防各类网站劫持,并且是免费在线查询,适用于各大站长,政府网站,学校,公司,医院等网站.它可以做到24小时定时监控,同时它可 ...

  2. vscode php转到定义

    点击再settings.json 中编辑 添加这一行,内容为php的安装路径

  3. Java基础进阶:APi使用,Math,Arrarys,Objects工具类,自动拆装箱,字符串与基本数据类型互转,递归算法源码,冒泡排序源码实现,快排实现源码,附重难点,代码实现源码,课堂笔记,课后扩展及答案

    要点摘要 Math: 类中么有构造方法,内部方法是静态的,可以直接类名.方式调用 常用: Math.abs(int a):返回参数绝对值 Math.ceil(double a):返回大于或等于参数的最 ...

  4. 简单测试linq to sql性能

         前些日子,做了一个物业收费系统,cs模式,用到了linq to sql 技术,这是我第一次使用这个东东写程序存取数据库,迷迷糊糊搞得一塌糊涂,当时有个同学他们找好的分页组件,然后写好了调用方 ...

  5. 5.装饰模式 Decorator (单一职责)

    结合: Android设计模式 006 装饰者模式  [B站]对整个重构的细节讲的容易懂 Android的设计模式-装饰者模式   [简书]结合安卓源码讲的还可以,让我对context有更深入的理解 ...

  6. 《深入理解 Java 虚拟机》读书笔记

    第二章 Java 内存区域与内存溢出溢出 程序计数器 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器.字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的 ...

  7. springMVC框架配置定时器

    在springmvc.xml添加如下内容在xmlns中添加 xmlns:task="http://www.springframework.org/schema/task"1在xsi ...

  8. easyui中权限分配和添加 前后端代码

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  9. hibernate连接数据库中文乱码

    4.做完这两步还是不行,需要修改hibernate的配置文件hibernate.cfg.xml,在配置文件配置hibernate.connection.url属性.示例: <property n ...

  10. San Francisco Crime Classification非数值性多分类问题

    给出了旧金山以往犯罪活动的相关信息,预测特定条件下的犯罪情况 分析数据集和测试集信息: 训练集给出的信息有: 1.Dates:时间日期和时间,这里考虑时间对犯罪活动有影响,日期和下边的周几有相似处,取 ...