前言

如何只单独测试django中的某一个py文件呢?或者说如何书写测试脚本?

我们可以在任意一个py文件(应用下的tests或者自己新建一个)中书写以下代码:

前期准备

创建一个电影表

class Movie(models.Model):
title = models.CharField(max_length=64)
price = models.DecimalField(max_digits=8,decimal_places=2)
publish_time = models.DateField() # 年月日
"""
DateField() 里面可以设置两个参数
auto_now:每次修改数据的时候,都会自动将最新的更新时间记录下来
auto_now_add: 只在创建数据的时候将创建时间自动记录下来,之后不会再改变
"""
# publish_time = models.DateTimeField() # 年月日 时分秒

1.create()

2.all()

3.filter()

4.update()

5.delete()

6.first()

7.last()

8.get()

9.value()

10.values_list()

11.order_by()

12.count()

13.exclude()

14.exists()

15.reverse()

16.distinct()

# 1.create() 返回值是当前被创建数据的对象本身
# 日期可以手动给
models.Movie.objects.create(title='红楼梦',price=876.23,publish_time='2014-1-1')
# 还可以直接传日期对象
from datetime import date
ctime = date.today()
models.Movie.objects.create(title='西游记',price=666.12,publish_time=ctime) # 2.all() queryset对象
res = models.Movie.objects.all()
print(res) # 3.filter() queryset对象 <QuerySet [<Movie: Movie object>]>
# res = models.Movie.objects.filter(id=1)
# pk指代的就是当前表的主键字段名,自动查找非常方便
res = models.Movie.objects.filter(pk=1)
#res = models.Movie.objects.filter(pk=1,title='python入门') #括号内可以放多个条件,默认是and关系
print(res)
#只要是queryset对象,就可以通过.query的方式查看到获取当前对象的内部sql语句
print(res.query) # 4.get() 直接获取对象本身(不推荐使用) 当查询条件不存在的时候会直接报错
res = models.Movie.objects.get(pk=1)
print(res)
print(res.title) # 5.values() queryset对象,[{},{},{}] 获取指定字段对应的数据
res = models.Movie.objects.values('title','publish_time')
print(res) # 6.values_list() queryset对象,[(),(),()] 获取指定字段对应的数据
res = models.Movie.objects.values_list('title','price')
print(res) #7.first() 取第一个元素对象 数据对象 #Movie
res = models.Movie.objects.filter().first() #filter()可省略
print(res)
#
#8.last() 取最后一个元素对象 数据对象 #Movie
res = models.Movie.objects.last()
print(res) #9.update() 更新数据 返回的是受影响的行数
res = models.Movie.objects.filter(pk=1).update(title='红楼梦',price=555)
print(res) #10.delete() 删除数据 返回值 受影响的表及行数
res = models.Movie.objects.filter(pk=3).delete()
print(res) #11. count() 统计数据条数
res = models.Movie.objects.filter(pk=1).count()
print(res) #12.order_by 按照指定字段排序
# res =models.Movie.objects.order_by('price') # 默认是升序
res = models.Movie.objects.order_by('-price') # 减号就是降序
print(res) #13.exclude 拿到指定字段之外的数据
res = models.Movie.objects.exclude(pk=1)
print(res) #14.exists() (了解) 判断指定对象是否有数据 返回布尔值
res = models.Movie.objects.filter(pk=1000).exists()
print(res) #15.reverse() 反转 返回QuerySet对象
res = models.Movie.objects.order_by('price').reverse()
print(res) #16.distinct() 去重:去重的前提 必须是由完全一样的数据才可以 返回QuerySet对象
res = models.Movie.objects.values('title','price').distinct()
print(res)

神奇的下划线查询

# 1.查询价格大于200的电影
res = models.Movie.objects.filter(price__gt=200)
print(res) #QuerySet对象 # 2.查询价格小于500的电影
res = models.Movie.objects.filter(price__lt=600)
print(res) # 3.查询价格大于等于400的电影
res = models.Movie.objects.filter(price__gte=400)
print(res)
#print(res.query) # 4.查询价格小于等于400的电影
res = models.Movie.objects.filter(price__lte=400)
print(res) # 5.查询价格 是789 或555 或120
res = models.Movie.objects.filter(price__in=[789,555,120])
print(res) # 6.查询价格再200到700之间的电影 顾头也顾尾
res = models.Movie.objects.filter(price__range=(200,700))
print(res) # 7.查询电影名中包含字母p的电影
'''
模糊查询:
关键字 like
关键符号 % _
'''
# res = models.Movie.objects.filter(title__contains='p') #默认区分大小写
res = models.Movie.objects.filter(title__icontains='p') #忽略大小写
print(res) # 8.查询2014年出版的电影
res =models.Movie.objects.filter(publish_time__year=2014)
print(res) # 9.查询是1月份出版的电影
res = models.Movie.objects.filter(publish_time__month=1)
print(res)

小结:

1.只要是queryset对象就可以无限制的调用queryset对象的方法

res = models.User.objects.filter(**kwargs).filter().filter().update()/delete()/values()
2.只要是queryset对象就可以直接点query查看当前queryset对象内部的sql语句
queryset_obj.query

查看所有orm语句内部的sql语句

把下面一段固定的日志文件配置 拷贝到配置文件中即可

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level': 'DEBUG',
},
}
}

Django 单表查询的更多相关文章

  1. Django单表查询及其方法

    单表查询 前期准备 首先新建一个test的python文件,然后再manage.py中导入main语句及其下面的复制到新文件中 并导入django 写上django.setup() 就可以导入对应的m ...

  2. 65、django之模型层(model)--添加、单表查询、修改基础

    上篇带大家简单做了一下图书表的创建.简单的查看和删除,今天会先简单介绍添加和修改,因为添加和修改与删除一样都很简单,本篇会相对多介绍一点单表查询,大家都知道数据库中查询是最重要的一部分,毕竟无论是修改 ...

  3. django之数据库表的单表查询

    一.添加表记录 对于单表有两种方式 # 添加数据的两种方式 # 方式一:实例化对象就是一条表记录 Frank_obj = models.Student(name ="海东",cou ...

  4. django之模型层(model)--添加、单表查询、修改基础

    上篇带大家简单做了一下图书表的创建.简单的查看和删除,今天会先简单介绍添加和修改,因为添加和修改与删除一样都很简单,本篇会相对多介绍一点单表查询,大家都知道数据库中查询是最重要的一部分,毕竟无论是修改 ...

  5. Django ORM 操作 必知必会13条 单表查询

    ORM 操作 必知必会13条 import os # if __name__ == '__main__': # 当前文件下执行 os.environ.setdefault('DJANGO_SETTIN ...

  6. Django框架----数据库表的单表查询

    一.添加表记录 对于单表有两种方式 # 添加数据的两种方式 # 方式一:实例化对象就是一条表记录 Frank_obj = models.Student(name ="海东",cou ...

  7. 54 Django 模型层(1) 单表查询

    单表操作: 一 项目的操作顺序: 1 在model.py文件中创建表结构 class Book(models.Model): id=models.AutoField(primary_key=True) ...

  8. Django框架之第六篇(模型层)--单表查询和必知必会13条、单表查询之双下划线、Django ORM常用字段和参数、关系字段

    单表查询 补充一个知识点:在models.py建表是 create_time = models.DateField() 关键字参数: 1.auto_now:每次操作数据,都会自动刷新当前操作的时间 2 ...

  9. 数据库开发-Django ORM的单表查询

    数据库开发-Django ORM的单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询集 1>.查询集相关概述 查询会返回结果的集,它是django.db.mod ...

随机推荐

  1. springboot&mybatis 增删改查系列(一)

    创建父项目 首先,我们需要创建一个Maven项目. 在这个项目的pom文件中加入以下几个依赖: <!-- spring boot --> <parent> <groupI ...

  2. X-WAF 安装配置指南

    X-WAF 是一款方便易用的云WAF,使用反向代理的方式介入Web服务器和访问者之间,不需要像 modSecurity 和 Naxsin 那样作为nginx的模块,需要进行编译安装 X-WAF使用 O ...

  3. hdu 3264 Open-air shopping malls(圆相交面积+二分)

    Open-air shopping malls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  4. 在 Linux 安装 IIS?

    在 Linuxe 安装 IIS? 在群里有人说他的老大让他在 Linux 中安装 IIS. 一群人回复不同的解决方案. 在 Linux 安装虚拟机,再安装 Windows. (哈哈哈) 这个问题虽然有 ...

  5. 史上最全的MYSQL备份方法

    本人曾经 用过的备份方式有:mysqldump.mysqlhotcopy.BACKUP TABLE .SELECT INTOOUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文 ...

  6. MySQL基础内容

    数据类型 菜鸟教程(见最下方网友整理) : https://www.runoob.com/mysql/mysql-data-types.html 其他: 1字节(byte)=8位(bit),所以dou ...

  7. H3C 典型数据链路层标准

  8. UVA 11922 Permutation Transformer —— splay伸展树

    题意:根据m条指令改变排列1 2 3 4 … n ,每条指令(a, b)表示取出第a~b个元素,反转后添加到排列尾部 分析:用一个可分裂合并的序列来表示整个序列,截取一段可以用两次分裂一次合并实现,粘 ...

  9. 28款GitHub最流行的开源机器学习项目,推荐GitHub上10 个开源深度学习框架

    20 个顶尖的 Python 机器学习开源项目 机器学习 2015-06-08 22:44:30 发布 您的评价: 0.0 收藏 1收藏 我们在Github上的贡献者和提交者之中检查了用Python语 ...

  10. 深浅Copy的理解

    在python里对对象进行拷贝有三个,即赋值,深拷贝,浅拷贝. 而对象又分为两种,一种是不可变对象(字符串.元组.数字 ),一种是可变对象(列表.字典). 而深浅拷贝有三种情况:拷贝的是不可变对象.拷 ...