Django的模型
定义模型
from django.db import models
class User(models.Model):# 类属性是表示表的字段username = models.CharField(max_length=50,unique=True)password = models.CharField(max_length=200)create_time = models.DateTimeField(auto_now_add=True) # auto_now_add新增数据时间为系统当前时间,且后续操作该条数据时,此字段值不会更新update_time = models.DateTimeField(auto_now=True) #auto_now新增数据时间为系统当前时间,且后续操作该条数据时,此字段值会更新为系统当前时间money=models.DecimalField(max_digits=16,decimal_places=2,null=True)flag = models.BooleanField(False)class Meta:db_table="tb_users" # 定义表明ordering=["-create_time"] # 排序
激活模型
# 生成迁移文件
python manage.py makemigrations
# 迁移
python manage.py migrate
# 已经建好数据库,需要将数据库反向到项目中的models.py模块中生成模型类
python manage.py inspectdb > app/models.py
使用模型
增加数据
user = User(username="fds",password=MD5(b"1213").hexdigest())
user.save()
# 使用create增加删除,不需要save()方法
uses={"username":"ff","password":"123456"}
User.objects.create(**uses)
# 一次创建多条数据
User.objects.bulk_create([User(username="fdfd"),User(username="dfs")])
修改数据
user = User.objects.get(pk=1)
user.username="测试人员"
user.save()
删除数据
# 删除一条数据user = User.objects.get(pk=1)if user:user.delete()
# 根据条件过滤删除多条数据
user = User.objects.filter(pk__gte=3)if user:user.delete()
# 逻辑删除,将表中某个字段的值置为falseuser = User.objects.get(pk=1)if user:user.flag=True # 将该状态设置为true,表示无效user.save()
查询数据
从数据库查询数据,首先会获取到一个查询集queryset
| 管理器的方法 | 返回类型 | 说明 |
|---|---|---|
| 模型类.objects.all() | QuerySet | 返回列表中所有的数据 |
| 模型类.objects.filter() | QuerySet | 返回列表中符合条件的数据 |
| 模型类.objects.exclude() | QuerySet | 返回不符合条件的数据 |
| 模型类.objects.order_by() | QuerySet | 对查询结果集进行排序 |
| 模型类.objects.values() | QuerySet | 返回的每一个对象为一个字典 |
| 模型类.objects.get() | 模型对象 | 如果找不到数据会报错,找到多条也会报错 |
| 模型类.objects.first() | 模型对象 | 返回第一条数据 |
| 模型类.objects.last() | 模型对象 | 返回最后数据 |
| 模型类.objects.exist() | bool | 判断查询到数据是否存在 |
| 模型类.objects.last() | int | 返回查询集中对象的数目 |
查询结果返回查询集
查询结果集可以再次进行链式过滤,再查询结果集的基础上进行filter等操作
- all()
user = User.objects.all()# 返回结果,返回所有的数据<QuerySet [<User: User object (4)>, <User: User object (3)>, <User: User object (2)>]>
- filter()
user = User.objects.filter(pk__gte=1) # filter对应sql中的where语句# 返回结果,返回pk大于等于1 的数据<QuerySet [<User: User object (4)>, <User: User object (3)>, <User: User object (2)>]>
# 链式查询user = User.objects.filter(pk__gte=1).filter(username="fff") # 返回结果<QuerySet [<User: User object (4)>]>
- order_by()
# 根据创建时间倒序排序
user = User.objects.order_by("-create_time")
# 按照create_time升序排列
user = User.objects.order_by("create_time")
- values()
# 不指定字段查询
user = User.objects.values()
# 返回结果
<QuerySet [{'id': 4, 'create_time': datetime.datetime(2023, 8, 20, 2, 2, 59, 302973, tzinfo=datetime.timezone.utc), 'update_time': datetime.datetime(202
3, 8, 20, 2, 2, 59, 302973, tzinfo=datetime.timezone.utc), 'username': 'shasha', 'password': '123456', 'money': None, 'flag': False}, {'id': 3, 'create_
time': datetime.datetime(2023, 8, 20, 2, 2, 50, 699239, tzinfo=datetime.timezone.utc), 'update_time': datetime.datetime(2023, 8, 20, 2, 2, 50, 699239, t
zinfo=datetime.timezone.utc), 'username': 'ff', 'password': '123456', 'money': None, 'flag': False}, {'id': 2, 'create_time': datetime.datetime(2023, 8,20, 1, 51, 8, 322158, tzinfo=datetime.timezone.utc), 'update_time': datetime.datetime(2023, 8, 20, 1, 56, 20, 989425, tzinfo=datetime.timezone.utc), 'u
sername': 'fsdf', 'password': '1111111', 'money': None, 'flag': False}]>
# 指定字段查询
user = User.objects.values("username")
# 返回结果
<QuerySet [{'username': 'shasha'}, {'username': 'ff'}, {'username': 'fsdf'}]>
查询结果返回对象
查询结果后面不能跟all()、filter()等字段进行过滤
- first()
user = User.objects.first()# 返回结果User object (4)
去重
# 使用distinct关键字去重
User.objects.all().values("password").distinct()
查询条数
查询记录数,查询结果集必须是queryset才能调用count()
User.objects.all().count()
判断结果是否为空
# 查询所有数据
User.objects.all().exists()
# 根据条件筛选出数据后判断数据是否为空
User.objects.filter(pk__lt=1).exists()
字段查询&运算符
属性名称__关系运算符=值


判断某个字段的值是否为空
# 查询money为空的结果
User.objects.filter(money__isnull=True)
# 返回结果
<QuerySet [<User: User object (4)>]>
精确判等
User.objects.filter(money__exact="100")
模糊查询
User.objects.filter(username__contains="h")
查询在区间范围内的数据
User.objects.filter(money_range=[90,200])
日期查询
# 查询年份
User.objects.filter(create_time__year=2023)
统计查询
使用aggregate方法进行聚合查询,不分组统计查询数据
- Max
# 查询到id的最大值
User.objects.aggregate(Max('pk'))
使用annotate方法进行分组统计查询数据
原生sql
User.objects.raw("select * from tb_users ")
# 返回结果
<RawQuerySet: select * from tb_users >
模型关系
一对一
外键设置在哪一方都可以,通过OneToOneField关键字设置关联关系
一对多
一般是将主表中的主键放到从表中做外键,外键一般是一对多中多的一方设置,通过ForeignKey关键字设置
class BookModel(models.Model):# 主表name =models.CharField(max_length=50,verbose_name="书名")price=models.IntegerField(verbose_name="价格")pub_date = models.DateField(verbose_name="时间")# 从主表查询从表的名字是通过related_name取的pub=models.ForeignKey('Publish',on_delete=models.CASCADE,related_name="books",null=True)
class Publish(models.Model):# 从表name=models.CharField(max_length=100)
从表操作主表,是通过在从表定义的外键进行操作的,对主表进行增删改查
# 修改从表中外键的值book = BookModel.objects.get(pk=2)pub1 = Publish.objects.get(pk=1)book.pub=pub1 # 修改从表中外键的值,且外键的值pub1必须是一个对象book.save()
通过主表操作从表,利用在从表中定义的related_name的值操作从表,对从表进行增删改查
# 通过主表操作从表,给从表新增数据# 通过出版社操作图书pub = Publish.objects.get(pk=2)# 给pk=2增加几本书pub.books.create(name="fds11",price=22,pub_date='2023-09-01')
# 通过主表操作从表,更新从表中的数据# 通过出版社操作图书pub = Publish.objects.get(pk=2)# 给pk=2增加几本书pub.books.update(name="娃哈哈",price=22,pub_date='2023-09-01')
book = BookModel.objects.get(pk=2)print(book.pub) # Publish object (1)# book.pub是Publish的对象
# 通过主表查询从表pub = Publish.objects.get(pk=2)# pub-books是一个查询管理器对象book = pub.books.all()
# 以从表字段作为过滤条件,查询主表中的数据
pub = Publish.objects.filter(books__name="娃哈哈")
# 返回查询结果
<QuerySet [<Publish: Publish object (2)>, <Publish: Publish object (2)>]>
多对多
通过ManyToManyField关键字设置多对多关系(商品和客户间的关系是多对多的关系)
注:一般要手动创建第三张表用来关联多对多的两张表
class Buyer(models.Model):name = models.CharField(max_length=50)leve = models.IntegerField(default=1)class Meta:db_table = "tb_buyer"class Goods():name = models.CharField(max_length=50, verbose_name="名")price = models.IntegerField(verbose_name="价格")class Meta:db_table = "tb_goods"# 多对多的关联的第三张表
class Order():buyer = models.ForeignKey("Buyer",on_delete=models.CASCADE)goods = models.ForeignKey("Goods", on_delete=models.CASCADE)num = models.IntegerField(default=1)class Meta:db_table="tb_order"
相关文章:
Django的模型
定义模型 from django.db import models class User(models.Model):# 类属性是表示表的字段username models.CharField(max_length50,uniqueTrue)password models.CharField(max_length200)create_time models.DateTimeField(auto_now_addTrue) # auto_now_add新增数据时间…...
非计算机科班如何丝滑转码
近年来,很多人想要从其他行业跳槽转入计算机领域。非计算机科班如何丝滑转码? 方向一:如何规划才能实现转码? 对于非计算机科班的人来说,想要在计算机领域实现顺利的转码并不是一件容易的事情,但也并非不…...
PyTorch深度学习实战(12)——数据增强
PyTorch深度学习实战(12)——数据增强 0. 前言1. 图像增强1.1 仿射变换1.2 亮度修改1.3 添加噪音1.4 联合使用多个增强方法 2. 对批图像执行图像增强3. 利用数据增强训练模型小结系列链接 0. 前言 数据增强是指通过对原始数据进行一系列变换和处理&…...
SpringCloud Ribbon中的7种负载均衡策略
SpringCloud Ribbon中的7种负载均衡策略 Ribbon 介绍负载均衡设置7种负载均衡策略1.轮询策略2.权重策略3.随机策略4.最小连接数策略5.重试策略6.可用性敏感策略7.区域敏感策略 总结 负载均衡通器常有两种实现手段,一种是服务端负载均衡器,另一种是客户端…...
04 qt功能类、对话框类和文件操作
一 QT中时间和日期 时间 ---- QTime日期 ---- QDate对于Qt而言,在实际的开发过程中, 1)开发者可能知道所要使用的类 ---- >帮助手册 —>索引 -->直接输入类名进行查找 2)开发者可能不知道所要使用的类,只知道开发需求文档 ----> 帮助 手册,按下图操作: 1 …...
安装软件包
安装软件包 创建一个名为 /home/curtis/ansible/packages.yml 的 playbook : 将 php 和 mariadb 软件包安装到 dev、test 和 prod 主机组中的主机上 将 RPM Development Tools 软件包组安装到 dev 主机组中的主机上 将 dev 主机组中主机上的所有软件包更新为最新版本 vim packa…...
玩转单元测试之gmock
引言 前文我们学习了gtest相关的使用,单靠gtest,有些场景仍然无法进行测试,因此就诞生了gmock。 gmock快速入门 在引入gtest时,gmock也同样引入了,因此只需要在编译时加上合适的编译选项即可,注意不同版…...
POI与EasyExcel--写Excel
简单写入 03和07版的简单写入注意事项: 1. 对象不同:03对应HSSFWorkbook,07对应XSSFWorkbook 2. 文件后缀不同:03对应xls,07对应xlsx package com.zrf;import org.apache.poi.hssf.usermodel.HSSFWorkbook; import …...
7. CSS(四)
目录 一、浮动 (一)传统网页布局的三种方式 (二)标准流(普通流/文档流) (三)为什么需要浮动? (四)什么是浮动 (五)浮…...
uni-app 集成推送
研究了几天,终于是打通了uni-app的推送,本文主要针对的是App端的推送开发过程,分为在线推送和离线推送。我们使用uni-app官方推荐的uni-push2.0。官方文档 准备工作:开通uni-push功能 勾选uniPush2.0点击"配置"填写表单…...
Spring Boot+Redis 实现消息队列实践示例
Spring BootRedis 实现一个轻量级的消息队列 文章目录 Spring BootRedis 实现一个轻量级的消息队列0.前言1.基础介绍2.步骤2.1. 引入依赖2.2. 配置文件2.3. 核心源码 4.总结答疑 5.参考文档6. Redis从入门到精通系列文章 0.前言 本文将介绍如何利用Spring Boot与Redis结合实现…...
11. 实现业务功能--获取用户信息
目录 1. 实现 Controller 2. 单体测试 3. 修复返回值存在的缺陷 3.1 用户的隐私数据:密码的密文和盐不能显示 3.2 将值为 null 的字段可以进行过滤 3.3 时间的格式需要进行处理,如 yyyy-mmmm-ddd HH:mm:ss 3.4 data 属性没有返回 4. 实现前端页…...
HTTPS
HTTPS是什么 HTTPS 属于应用层协议,其原理是通过SSL/TLS协议在HTTP和TCP之间插入一层安全机制。通过SSL/TLS握手过程,客户端和服务器协商出一个对称密钥,用于后续的数据加密和解密,从而保证数据的机密性和完整性。 为什么会需要…...
spring详解
spring是于2003年兴起的一款轻量级的,非侵入式的IOC和AOP的一站式的java开发框架,为简化企业级应用开发而生。 轻量级的:指的是spring核心功能的jar包不大。 非侵入式的:业务代码不需要继承或实现spring中任何的类或接口 IOC&…...
香港服务器备案会通过吗?
对于企业或个人来说,合规备案是网络运营的基本要求,也是保护自身权益的重要举措。以下内容围绕备案展开话题,希望为您解开疑惑。 香港服务器备案会通过吗? 目前,香港服务器无法备案,这是由于国内管理规定的限制…...
乐鑫推出 ESP ZeroCode 控制台
乐鑫科技 ESP ZeroCode 控制台是一个网页应用,用户只需点击鼠标,描述想要创建的产品类型、功能及其硬件配置,即可按照自身需求,快速生成符合 Matter 认证的固件,并在硬件上进行试用。试用过程中,如有任何不…...
从NLP到聊天机器人
一、说明 今天,当打电话给银行或其他公司时,听到电话另一端的机器人向你打招呼是很常见的:“你好,我是你的数字助理。请问你的问题。是的,机器人现在不仅可以说人类语言,还可以用人类语言与用户互动。这是由…...
相关搜索引擎常用搜索语法(Google hacking语法和FOFA语法)
一:Google Hack语法 Google Hacking原指利用Google搜索引擎搜索信息来进行入侵的技术和行为,现指利用各种搜索引擎并使用一些高级的搜索语法来搜索信息。既利用搜索引擎强大的搜索功能,在在浩瀚的互联网中搜索到我们需要的信息。 ࿰…...
Mysql查询
第三章:select 语句 SELECT employees.employee_id,employees.department_id FROM employees WHERE employees.employee_id176; DESC departments;SELECT * FROM departments;第四章:运算符使用 SELECT employees.last_name,employees.salary FROM em…...
解决http下navigator.clipboard为undefined问题
开发环境下使用navigator.clipboard进行复制操作,打包部署到服务器上后,发现该功能显示为undefined;查相关资料后,发现clipboard只有在安全域名下才可以访问(https、localhost),在http域名下只能得到undefined…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
DeepSeek越强,Kimi越慌?
被DeepSeek吊打的Kimi,还有多少人在用? 去年,月之暗面创始人杨植麟别提有多风光了。90后清华学霸,国产大模型六小虎之一,手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水,单月光是投流就花费2个亿。 疯…...
