目录

一:Django测试脚本

  1. 当你只是想测试django中的某一个py文件内容 那么你可以不用书写前后端交互的形式
  2. 而是直接写一个测试脚本即可
1.测试环境准备
  • 脚本代码无论是写在应用下的tests.py还是自己单独开设py文件都可以
2.tests.py
  1. # 测试环境的准备 去manage.py中拷贝前四行代码 然后自己写两行
  2. import os
  3. import sys
  4. if __name__ == "__main__":
  5. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangooneday64.settings")
  6. # 自己写两行
  7. import django
  8. django.setup()
  9. # 在这个代码块的下面就可以测试django里面的单个py文件了
  10. # 导入app01文件夹内models文件
  11. from app01 import models
  12. # 测试models文件内User运行
  13. models.User.objects.all()
3.models.py
  1. from django.db import models
  2. class User(models.Model):
  3. name = models.CharField(max_length=32)
  4. age = models.IntegerField()
  5. register_time = models.DateTimeField()
  6. """
  7. DateField : 年月日
  8. DateTimeField : 年月日 时分秒
  9. 两个重要参数
  10. auto_now : 每次操作数据的时候 该字段会自动将当前时间更新
  11. auto_now_add : 在创建数据的时候会自动将当前创建时间记录下来 之后只要不人为的修改 那么就一直不变
  12. """
  13. def __str__(self):
  14. return '对象:%s' % self.name

4.切换MySQL数据库
  1. 1.设置配置文件mysql替换sqllite3
  2. DATABASES = {
  3. 'default': {
  4. 'ENGINE': 'django.db.backends.mysql',
  5. 'NAME': 'day64',
  6. 'USER': 'root',
  7. 'PASSWORD': '123',
  8. 'HOST': '127.0.0.1',
  9. 'PORT': 3306,
  10. 'CHARSET': 'utf8',
  11. }
  12. }
  13. 2.配置__init__文件 PyMySQL替换MySQLdb
  14. import pymysql
  15. pymysql.install_as_MySQLdb()
  16. 3.提前配置好navicat和数据库

二:单表操作

1.pk关键字与get关键字
  1. # pk关键字:
  2. pk会自动查找到当前表的主键字段 指代的就是当前表的主键字段
  3. 用了pk之后 你就不需要指代当前表的主键字段到底叫什么了
  4. 如下例:
  5. uid
  6. pid
  7. sid
  8. # get关键字:
  9. get方法返回的直接就是当前数据对象 但是该方法不推荐使用
  10. 一旦数据不存在会直接报错 filter则不会
  • 注意:
  1. django自带的sqlite3数据库对日期格式不是很敏感 处理的时候容易出错
2.增
  1. # 日期字符串
  2. res = models.User.objects.create(name='objk', age=18, register_time='2002-1-21')
  3. # 返回值当前创建对象本身
  4. print(res)
  5. # 日期对象
  6. import datetime
  7. # # 日期对象
  8. ctime = datetime.datetime.now()
  9. user_obj = models.User(name='egon', age=84, register_time=ctime) # 支持字符串日期和日期对象
  10. # 保存
  11. user_obj.save()
3.删
  1. # 批量删除
  2. res = models.User.objects.filter(pk=2) # pk=2 等价于 id=2
  3. # 返回值 影响的行数
  4. # 单一针对性删除
  5. user_obj = models.User.objects.filter(pk=1).filter()
  6. user_obj.delete()
4.修
  1. # 修改
  2. models.User.objects.filter(pk=5).update(name='egonDSB')
  3. # 先获取在修改
  4. user_obj = models.User.objects.get(pk=4) # 值不存在报错
  5. user_obj = models.User.objects.filter(pk=6) # 值不存在返回null
  6. print(user_obj)
  7. # 对象点name 修改值
  8. user_obj.name = 'egonPPP'
  9. user_obj.save()

三:必知必会13条

  1. all() : 查询所有数据
  2. filter() : 筛选
  3. get() : 直接拿数据对象 条件不存在报错
  4. first() : queryset里面第一个元素
  5. last() : queryset里面最后一个元素
  6. values() : 可以指定获取的数据字段 列表套字典 字典内K:V
  7. values_list() : 列表套元组 元组内V
  8. distinct() : 去重
  9. order_by() : 排序
  10. reverse() : 反转的前提是数据已经排序过了 order_by()
  11. count() : 统计当前数据的个数
  12. exclude() : 括号内数据排除在外
  13. exists() : 存在返回True 不存在返回False
1.all查询所有数据
  1. res = models.User.objects.all()
  2. print(res)
  3. <QuerySet [<User: 对象:egon>, <User: 对象:egonDSB>, <User: 对象:objk>]>
2.filter 过滤条件
  1. res = models.User.objects.filter(pk=5).delete()
3.get 直接拿数据对象 条件不存在报错
  1. res = models.User.objects.get(id=5)
  2. print(res)
  3. 对象:egonDSB
4.first() 拿queryset里面第一个元素
  1. res = models.User.objects.all().first()
  2. print(res)
  3. 对象:egon
5.last() 拿queryset里面最后一个元素
  1. res = models.User.objects.all().last()
  2. print(res)
  3. 对象:objk
6.values() 可以指定获取的数据字段 列表套字典 K:v
  1. SQL语句 : select name,age from *
  2. res = models.User.objects.values('name', 'age')
  3. print(res)
  4. <QuerySet [{'name': 'egon', 'age': 84}, {'name': 'objk', 'age': 18}]>
7.values_list() 列表套元组 v
  1. res = models.User.objects.values_list('name', 'age')
  2. print(res)
  3. <QuerySet [('egon', 84), ('objk', 18)]>
  4. print(res.query) # 查看内容封装的SQL语句
  5. SELECT `app01_user`.`name`, `app01_user`.`age` FROM `app01_user`
  6. """
  7. 查看内部封装的sql语句
  8. 1.上述查看sql语句方式 只能用于queryset对象
  9. 2.只有queryset对象才能够点击query查看内部sql语句
  10. """
8.distinct() 去重
  1. res = models.User.objects.values('name', 'age').distinct()
  2. print(res)
  3. """
  4. 去重条件
  5. 1.去重一定要是一模一样的数据
  6. 2.如果带有主键那么肯定不一样 你在往后的查询中一定不要忽略主键
  7. """
9.order_by() 排序
  1. res = models.User.objects.order_by('age') # 默认升序
  2. < QuerySet[ < User: 对象:objk >, < User: 对象:egon >] >
  3. res = models.User.objects.order_by('-age') # 降序
  4. < QuerySet[ < User: 对象:egon >, < User: 对象:objk >] >
  5. print(res)
10.reverse() 反转的前提是数据已经排过序了 order_by()
  1. res = models.User.objects.all()
  2. <QuerySet [<User: 对象:egon>, <User: 对象:objk>]>
  3. res1 = models.User.objects.order_by('age').reverse() # 升序改为降序
  4. <QuerySet [<User: 对象:objk>, <User: 对象:egon>]>
  5. print(res1)
11.count() 统计当前数据的个数 User内
  1. res = models.User.objects.count()
  2. print(res)
  3. 2
12.exclude() 排除在外
  1. res = models.User.objects.exclude(name='objk') # 查询name='objk'之外的数据 其实就是排除数据
  2. print(res)
  3. <QuerySet [<User: 对象:egon>]>
13.exists() 不存在返回布尔值False 存在返回True
  1. res = models.User.objects.filter(pk=10).exists()
  2. print(res)
  3. False
15.查看内容封装的SQL语句
  1. values_list() 列表套元组 v
  2. res = models.User.objects.values_list('name', 'age')
  3. print(res.query) # 查看内容封装的SQL语句
  4. SELECT `app01_user`.`name`, `app01_user`.`age` FROM `app01_user`
  5. 查看内部封装的sql语句
  6. 1.上述查看sql语句方式 只能用于queryset对象
  7. 2.只有queryset对象才能够点击query查看内部sql语句

四:神奇的双下划线查询

1.双下划线查询语法
  1. 大于 : __gt
  2. 小于 : __lt
  3. 大于等于 : __gte
  4. 小于等于 : __lte
  5. 或者 : __in in走索引 not in 不走索引
  6. 之间 : __range
  7. 模糊查询 : __contains
  8. 区分大小写 : __icontains
  9. 忽略大小写 : __icontains
  10. 以什么开头 : __startswith
  11. 以什么结尾 : __endswith
  12. 查询注册时间 : register_time__year
2.双下划线查询
  1. # 1 年龄大于35岁的数据
  2. res = models.User.objects.filter(age__gt=35)
  3. print(res)
  4. # 2 年龄小于35岁的数据
  5. res = models.User.objects.filter(age__lt=35)
  6. print(res)
  7. # 3.大于等于 小于等于
  8. res = models.User.objects.filter(age__gte=32)
  9. print(res)
  10. res = models.User.objects.filter(age__lte=32)
  11. print(res)
  12. # 4.年龄是18 或者 32 或者40
  13. res = models.User.objects.filter(age__in=[18,32,40])
  14. print(res)
  15. # 5.年龄在18到40岁之间的 首尾都要
  16. res = models.User.objects.filter(age__range=[18,40])
  17. print(res)
  18. # 6.查询出名字里面含有s的数据 模糊查询
  19. res = models.User.objects.filter(name__contains='s')
  20. print(res)
  21. like查询不走索引
  22. # 7.是否区分大小写 查询出名字里面含有p的数据 区分大小写
  23. res = models.User.objects.filter(name__contains='p')
  24. print(res)
  25. # 8.忽略大小写
  26. res = models.User.objects.filter(name__icontains='p')
  27. print(res)
  28. # 9.以字符开头
  29. res = models.User.objects.filter(name__startswith='j')
  30. # 10.以字符结尾
  31. res1 = models.User.objects.filter(name__endswith='j')
  32. print(res,res1)
  33. # 11.查询出注册时间是 2020 1月
  34. res = models.User.objects.filter(register_time__month='1')
  35. res = models.User.objects.filter(register_time__year='2020')

Django测试脚本-单表操作(增删改查)-必知必会13条-神奇的双下划线的更多相关文章

  1. Django学习笔记--数据库中的单表操作----增删改查

    1.Django数据库中的增删改查 1.添加表和字段 # 创建的表的名字为app的名称拼接类名 class User(models.Model): # id字段 自增 是主键 id = models. ...

  2. Django中对单表的增删改查

    之前的简单预习,重点在后面 方式一: # create方法的返回值book_obj就是插入book表中的python葵花宝典这本书籍纪录对象   book_obj=Book.objects.creat ...

  3. Django学习笔记(10)——Book单表的增删改查页面

    一,项目题目:Book单表的增删改查页面 该项目主要练习使用Django开发一个Book单表的增删改查页面,通过这个项目巩固自己这段时间学习Django知识. 二,项目需求: 开发一个简单的Book增 ...

  4. python全栈开发day61-django简单的出版社网站展示,添加,删除,编辑(单表的增删改查)

    day61 django内容回顾: 1. 下载: pip install django==1.11.14 pip install -i 源 django==1.11.14 pycharm 2. 创建项 ...

  5. hibernate对单表的增删改查

    ORM: 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping) 实现对单表的增删改查 向区域表中增加数据: 第一步: 新建一个Da ...

  6. django模型层 关于单表的增删改查

    关于ORM MTV或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库, 通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员 ...

  7. $Django 多表操作(增删改查,基于双下划线,对象的查询) 在Python脚本中调用Django环境

    在Python脚本中调用Django环境. import osif __name__ == '__main__': os.environ.setdefault("DJANGO_SETTING ...

  8. django 利用ORM对单表进行增删改查

    牛小妹上周末,一直在尝试如何把数据库的数据弄到界面上.毕竟是新手,搞不出来,文档也看不懂.不过没关系,才刚上大学.今晚我们就来解释下,要把数据搞到界面的第一步.先把数据放到库里,然后再把数据从库里拿出 ...

  9. django模型层之多表操作 增删改查

    多表操作之创建模型 这边以书为中心创建一个模型 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一的关系(on ...

  10. $Django 模板层(模板导入,继承)、 单表*详(增删改查,基于双下划线的查询)、static之静态文件配置

    0在python脚本中使用django环境 import osif __name__ == '__main__':    os.environ.setdefault("DJANGO_SETT ...

随机推荐

  1. Kibana:如何周期性地为 Dashboard 生成 PDF Report

    转载自:https://blog.csdn.net/UbuntuTouch/article/details/108449775 按照上面的方式填写.记得把之前的 URL 拷贝到 webhook 下的 ...

  2. webpack打包思路与流程解析

    一:创建一个新的工程,项目初始化 npm init -y 二:搭建项目框架 三:编写main.js文件内容,在index.js中引入,在把index.js引入到index.html中 例: expor ...

  3. Git使用与心得体会

    Git使用与心得体会 一.闲聊 闲暇时间学一下Git,也算是不用在网页端操作github了 二.Git相关 集中式与分布式 Git是一个分布式的版本控制系统,而传统的SVN则属于集中式 集中式与分布式 ...

  4. vulnhub靶场之EMPIRE

    准备: 攻击机:虚拟机kali.本机win10. 靶机:EMPIRE: BREAKOUT,地址我这里设置的桥接,下载地址:https://download.vulnhub.com/empire/02- ...

  5. nginx 通过IP访问项目

    项目新需求,因为是小范围使用的网站,所以不打算配域名,直接通过IP访问当前项目. 环境: LNMP 一键集成环境 当前IP指向的目录 :/home/wwwroot/default/ 但是我的项目.需要 ...

  6. servlet技术--使用注解模拟用户登录实现页面跳转

    文章目录 1.servlet体系结构 2.servlet技术特点 3.servlet和jsp的区别 4.servlet开发 1.servlet体系结构 servlet实质就是按servlet规范编写的 ...

  7. JQuery中的DataTables表格插件

    一.DataTables表格插件的简介 DataTables是一个jQuery的表格插件.它具有以下特点: 自动分页处理 即时表格数据过滤 数据排序以及数据类型自动检测 自动处理列宽度 可通过CSS定 ...

  8. Unity——滚动的小球

    Unity--滚动的小球 工程理解 本游戏为通过键盘上的W.A.S.D键控制小球的运动轨迹来对固定位置上的小方块进行碰撞,以此来进行加分计数的. 其中主要对象为小球和自转的小方块:在小球上,我们添加刚 ...

  9. nrf9160做modem——测试连接阿里云

    简介:在前面有讲过如何使用nrf9160去连接一个云,然后进行发布订阅信息,但是当时连接的是一个免费的测试云,在国内的话许多人想要连接阿里云或者华为云,下面就来测试一下连接阿里云.这里为什么要和上一篇 ...

  10. SoringCloud(四) - 微信获取用户信息

    1.项目介绍 2.微信公众平台 和 微信开放文档 2.1 微信公众平台 2.1.1 网址链接 https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?ac ...