Django(七、模型层)

文章目录

  • 模型层
      • 模型层前期准备
            • 使用django ORM要注意
      • 代码演示:
      • 切换MySQL数据库
            • 如何查看django ORM 底层原理?
      • 单表操作
            • 模型层之ORM常见关键字
            • 基础的增删改查
            • 常用的关键字
      • 常见的十几种查询
      • 基于双下滑线的查询

模型层

模型层前期准备

使用django ORM要注意

1.django自带的sqlite3数据可对时间字段不敏感,有时候会展示错乱,所以我们习惯切换成常见的数据库比如MySQL。

2.django ORM并不会自动帮我们创建数据库,所以我们需要提前准备好‘db001’库

3.id字段是自动添加的,如果想自定义主键,只需要在其中一个字段中店家primary_key=True,如果django发现你已经明确的设置了Field.primary_key,它将不会自动添加ID列

4.django支持mysql5.5及更高版本。

默认不允许单独测试某个py文件,如果想要测试某个py文件,一般是测试models.py文件

测试环境1:pycharm提供的python console(临时保存,不推荐使用)

测试环境2:自己搭建(自带的test或者自己创建的py文件)

1.拷贝manage.py前四行代码
2.自己再添加两行import djangodjango.setup()

代码演示:

tests.py

# manage.py中拷贝前四行代码
import os
import sys
if __name__=='__main__':  # 需要在__name__下运行os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoProject6.settings')# 1.引入django配置文件# 手写两行import djangodjango.setup()  # 2.启动django# 导入app01文件夹内models文件并 测试models文件内User运行from app01 import modelsmodels.User.objects.all()

models.py

class Userinfo(models.Model):username = models.CharField(max_length=32)password = models.CharField(max_length=64)age = models.IntegerField(null=True)register_time = models.DateTimeField(verbose_name='注册事件', auto_now_add=True)"""DateField       : 年月日DateTimeField   : 年月日 时分秒两个重要参数auto_now        : 每次操作数据的时候 该字段会自动将当前时间更新 auto_now_add    : 在创建数据的时候会自动将当前创建时间记录下来 之后只要不人为的修改 那么就一直不变"""def __str__(self):return self.username

在这里插入图片描述

切换MySQL数据库

1.提前终端创建好库db001
2.将DATABASES的配置更改DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'db001','USER':'root','PASSWORD':'123123','HOST':'127.0.0.1','PORT':3306,'CHARSET':'utf8'}
}
3.连接MySQL库,数据迁移
4.makemigrations
5.migrate
如何查看django ORM 底层原理?

django ORM本质还是SQL语句。

1.如果有QuerySet对象,那么可以直接点query查看SQL语句

res2 = models.Userinfo.objects.values_list('id', 'username')
print(res.query)
SELECT `app01_userinfo`.`id`, `app01_userinfo`.`username` FROM `app01_userinfo`

结论:有些不是QuerySet对象,就不能通过点query的形式点出来,就只能使用通过的方法

2.如果想查看所有ORM底层的SQL语句,也可以直接在配置文件添加日志记录

res1 = models.User.objects.create(name='kimi',age=16)
print(res.query)  # 会报错settings最后>>>拷贝代码放在settingsLOGGING = {'version': 1,'disable_existing_loggers': False,'handlers': {'console':{'level':'DEBUG','class':'logging.StreamHandler',},},'loggers': {'django.db.backends': {'handlers': ['console'],'propagate': True,'level':'DEBUG',},}
}

单表操作

模型层之ORM常见关键字
基础的增删改查
方法返回值
create(字段名=数据)刚创建的数据记录对象
filter(筛选条件)QuerySet列表对象
filter().update(修改内容)受影响的行数
filter().delete()受影响的行数即各表受影响的行数
常用的关键字
create描述
filter创建数据并直接获取当前创建的数据对象
first/last根据条件筛选数据 结果是QuerySet [数据对象1,数据对象2]
update拿queryset里面第一个元素/拿queryset里面最后一个元素
delete删除数据(批量删除)
all查询所有数据 结果是QuerySet [数据对象1,数据对象2]
values根据指定字段获取数据 结果是QuerySet [{}},{},{},{}]
values_list根据指定字段获取数据 结果是QuerySet [(),(),(),()]
distinct去重 数据一定要一模一样才可以 如果有主键肯定不行
order_by根据指定条件排序 默认是升序 字段前面加负号就是降序
get根据条件筛选数据并直接获取到数据对象 一旦条件不存在会直接报错 不建议使用
exclude取反操作
reverse颠倒顺序(被操作的对象必须是已经排过序的才可以)
count统计结果集中数据的个数
exists判断结果集中是否含有数据 如果有则返回True 没有则返回False

常见的十几种查询

if __name__=='__main__':os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'day06_1.settings')  # 1.引入django配置文件import djangodjango.setup()  # 2.启动djangofrom app01 import modelsres = models.Userinfo.objects.filter(pk=1).first()  # 查询id为1的数据print(res)# 查询所有数据,但是只要id和username字段res1 = models.Userinfo.objects.values('id', 'username')for i in res1:print(i['id'],i['username'])res2 = models.Userinfo.objects.values_list('id', 'username')  # 取出来的对象是列表套元组,可以通过索引取值print(res2)  # <QuerySet [(1, 'jack'), (2, 'jerry'), (3, 'tank')]>print(res2[0][1])  # jackprint(res2.query)  #  SELECT `app01_userinfo`.`id`, `app01_userinfo`.`username` FROM `app01_userinfo`查看底层的SQL语句res3 = models.Userinfo.objects.all().values('password').distinct()  # distinct 去重print(res3)  # <QuerySet [{'password': '123'}, {'password': '222'}]>res4 = models.Userinfo.objects.all().order_by('id')  # order_by 默认按照升序排序,在需要查找的值中加一个-号就是降序,可以添加多个字段排序print(res4)res5 = models.Userinfo.objects.all().order_by('-id').reverse()  # reverse 反转排序,前提是已经排过序了print(res5)res6 = models.Userinfo.objects.filter(password=123).count()  # count 统计当前数据的个数print(res6)res7 = models.Userinfo.objects.exclude(pk=1)  # exclude 查询除了id=1的所有数据print(res7)res8 = models.Userinfo.objects.filter(pk=4).exists()  # exists 查询当前数据是否存在print(res8)res9 = models.Userinfo.objects.create(username='sb',password=123)  # 添加数据print(res9)

基于双下滑线的查询

    1 年龄大于35岁的数据res = models.User.objects.filter(age__gt=35)print(res)2 年龄小于35岁的数据res = models.User.objects.filter(age__lt=35)print(res)大于等于 小于等于res = models.User.objects.filter(age__gte=32)print(res)res = models.User.objects.filter(age__lte=32)print(res)年龄是18 或者 32 或者40res = models.User.objects.filter(age__in=[18,32,40])print(res)年龄在1840岁之间的  首尾都要res = models.User.objects.filter(age__range=[18,40])print(res)查询出名字里面含有s的数据  模糊查询res = models.User.objects.filter(name__contains='s')print(res)是否区分大小写  查询出名字里面含有p的数据  区分大小写res = models.User.objects.filter(name__contains='p')print(res)忽略大小写res = models.User.objects.filter(name__icontains='p')print(res)res = models.User.objects.filter(name__startswith='j')res1 = models.User.objects.filter(name__endswith='j')print(res,res1)查询出注册时间是 2020 1月res = models.User.objects.filter(register_time__month='1')res = models.User.objects.filter(register_time__year='2020')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/144500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ATE测试工程师的薪资前景如何?能转DFT工程师吗?

在芯片行业&#xff0c;ATE测试工程师扮演着至关重要的角色。他们不仅需要理解电路和芯片内部的工作原理&#xff0c;还需要利用各种测试工具和方法对芯片进行精确的测试和分析。那么ATE测试工程师前景如何&#xff1f;需要具备哪些技能要求呢&#xff1f; 首先来了解什么是AT…

【技巧】Windows 11 如何安装日文语言包和日文系统

Windows 11 如何安装日文语言包和日文系统 安装日语语言第一步&#xff1a;打开系统设置第二步&#xff1a;选择【时间和语言】选项第三步&#xff1a;点击【添加语言】按钮第四步&#xff1a;输入语言&#xff0c;并选择第五步&#xff1a;安装输入法/语言包第六步&#xff1a…

电池故障估计:Realistic fault detection of li-ion battery via dynamical deep learning

昇科能源、清华大学欧阳明高院士团队等的最新研究成果《动态深度学习实现锂离子电池异常检测》&#xff0c;用已经处理的整车充电段数据&#xff0c;分析车辆当前或近期是否存在故障。 思想步骤&#xff1a; 用正常电池的充电片段数据构造训练集&#xff0c;用如下的方式构造…

php在线审稿系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 php在线审稿系统是一套完善的web设计系统mysql数据库 &#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 php在线审稿系统 代码 https://download.csdn.net/download/qq_41221322/885…

【python】Django——django简介、django安装、创建项目、快速上手

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 【Django专栏】 Django——django简介、django安装、创建项目、快速上手 Django——templates模板、静态文件、django模板语法、请求和响应 Django——连接mysql数据库 Django——django安装、创建django项目、dj…

字母不重复的子串-第15届蓝桥第二次STEMA测评Scratch真题精选

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第158讲。 第15届蓝桥第2次STEMA测评已于2023年10月29日落下帷幕&#xff0c;编程题一共有6题&#xff0c;分别如下&am…

解决:Android TextView 设置斜体后右侧文字被遮挡

一、问题说明 遇到一个比较奇怪的情况&#xff0c;给 TextView 文字设置倾斜后&#xff0c;右侧的文字会被遮挡&#xff0c;感觉这应该是 Android 的一个 bug &#xff01; 上代码&#xff1a; <TextViewandroid:id"id/tv_title"android:layout_width"wra…

windows与wsl互传文件

1.把windows上的文件传到wsl中&#xff0c;\\wsl.localhost\Ubuntu-22.04\mnt\wsl 将你要传的文件放到wsl这个路径下&#xff0c;Ubuntu-22.04是我的子系统&#xff0c;换成自己对应的 2.把wsl中的文件传到windows中 将wsl中的文件放到 /mnt/c 或 /mnt/d 中&#xff0c;这两…

小红书直播开启新纪元,拓世法宝AI直播一体机助您轻松成为行业标杆!

2023年&#xff0c;小红书终于成功坐上了电商牌桌。 今年3月的“董洁效应”带动了一批品牌商家、博主入驻小红书试水&#xff0c;其直播业务积蓄了巨大势能。10月15日&#xff0c;“初代名媛”章小蕙完成了在小红书的第二场直播&#xff0c;以销售额破亿的成绩打响了小红书双1…

大厂必备的6款React UI框架

优秀的ReactUI框架可以为您节省开发时间&#xff0c;提高开发效率&#xff0c;统一设计语言。你还在为你的项目寻找高质量的ReactUI框架吗&#xff1f;为了让您更容易找到易于使用的UI框架&#xff0c;分享6个优秀的ReactUI框架选项&#xff0c;并介绍了每个UI框架的不同功能和…

Google 向中国开发者开放数百份 TensorFlow 资源

Google 的机器学习框架 TensorFlow 自 2015 年开源后&#xff0c;已然成为 AI 领域最受欢迎的框架。 据统计&#xff0c;在广受欢迎的 Python 编程语言在线软件知识库 PyPi 上&#xff0c;TensorFlow 的下载次数已超过 90 万&#xff0c;其中有 15% 来自中国。谷歌官方博客也表…

Android问题笔记四十四:关于RecyclerView出现Inconsistency detected崩溃

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…

AppLink上的小鹅通能实现什么操作呢?

AppLink实现小鹅通信息同步操作 本篇文章给大家演示下小鹅通可在AppLink平台上快速实现的同步操作&#xff0c;1.用户注册或更换手机号信息同步 2.小鹅通产生新的购买订单&#xff0c;订单信息同步。 以下操作均需获得小鹅通授权 授权后登录AppLink操作台&#xff0c;在【我的…

ajax异步传值以及后端接收参数的几种方式

异步传值 第一种呢&#xff0c;也是最简单的一种&#xff0c;通过get提交方式&#xff0c;将参数在链接中以问号的形式进行传递 // 前台传值方法 // 触发该方法调用ajaxfunction testAjax(yourData) {$.ajax({type: "get", // 以get方式发起请求url: "/yo…

HackTheBox-Starting Point--Tier 2---Included

文章目录 一 Included 测试过程1.1 打点1.2 横向移动1.3 权限提升 二 题目 一 Included 测试过程 1.1 打点 1.端口扫描 nmap -sV -sC 10.129.193.212.访问web站点 3.文件包含漏洞探测 观察请求地址&#xff1a;http://10.129.193.21/?filehome.php&#xff0c;利用file参数动…

【Spring】 Spring中的IoC(控制反转)

以往在定义业务层实现时&#xff0c;在指定具体地Dao时候需要具体地定义出其实现&#xff1a; public class BookServiceImpl implements BookService{private BookDao bookDao new BookDaoImpl();public void save(){bookDao.save()} }public class BookDaoImpl implements …

只有开源才能拯救AI

导语 | 随着 AI 技术的蓬勃发展&#xff0c;大模型的开源化正成为人工智能领域的新潮流&#xff0c;但同时引发的伦理和安全风险也饱受大家关注&#xff0c;如何把握平衡其中的尺度成为开源的一大难题。我们又应该如何有效进行开源治理&#xff1f;未来将走向何方&#xff1f;今…

二叉树题目:统计二叉树中好结点的数目

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;统计二叉树中好结点的数目 出处&#xff1a;1448. 统计二叉树中好结点的数目 难度 5 级 题目描述 要求 给定一…

IEEE Standard for SystemVerilog—Chapter14. Clocking blocks

14.1 General This clause describes the following: — Clocking block declarations(时钟块声明) — Input and output skews(输入和输出偏斜) — Clocking block signal events(时钟块信号事件) — Cycle delays(周期延迟) — Synchronous events(同步事件) — Synchronous…

Ubuntu22.04离线安装uwsgi问题记录

GCC4.8安装 1、报错信息1&#xff1a; 由于缺少gcc4.8环境导致的无法安装uwsgi 解决方案&#xff1a; 离线安装GCC4.8环境, GCC4.8.5离线安装步骤如下&#xff1a; 1、下载gcc的离线安装包及其依赖包&#xff0c;链接如下&#xff1a; https://download.csdn.net/download/…