Django模型层

news/2025/2/14 4:15:46/

模型层

与数据库相关的,用于定义数据模型和数据库表结构。 在Django应用程序中,模型层是数据库和应用程序之间的接口,它负责处理所有与数据库相关的操作,例如创建、读取、更新和删除记录。Django的模型层还提供了一些高级功能

首先准备工作:切换mysql数据库

DATABASES = {'default': {# 'ENGINE': 'django.db.backends.sqlite3','ENGINE': 'django.db.backends.mysql','NAME': 'db2','USER': 'root','PASSWORD': '12345','HOST': '127.0.0.1','PORT': 3306,'CHARSET': 'utf8'}

测试脚本

接下来我们可以使用测试脚本来直接运行,注意后面的Django代码必须写在测试脚本下面

把测试脚本放进一个py文件即可
import os
import sys
import django
if __name__ == "__main__":os.environ.setdefault("DJANGO_SETTINGS_MODULE", "项目名称.settings")import djangodjango.setup()django.setup()from app01 import models

常用的关键字

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

示例

如果使用get,建议加上try

if __name__ == "__main__":os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangoProject.settings")import djangodjango.setup()from app01 import modelstry:res = models.Userinfo.objects.filter(pk=1).get()except Exception as f:print(f)

value与value_list

res = models.Userinfo.objects.values('id', 'username', 'password')for i in res:print(i.get('id'))    # <QuerySet [{'id': 1, 'username': 'kk', 'password': '1234'}, {'id': 2, 'username': 'cc', 'password': '232'}, {'id': 3, 'username': 'rer', 'password': '323'}]># 1 2 3 索引0为id,1为usernameprint(res)   # <QuerySet [(1, 'kk', '1234'), (2, 'cc', '232'), (3, 'rer', '323')]>

查看内部sql语句

只有返回的结果是queryset对时才能用query查看

res = models.Userinfo.objects.values('id', 'username', 'password')for i in res:print(i.get('id')) print(res.query)"""SELECT `app01_userinfo`.`id`, `app01_userinfo`.`username`, `app01_userinfo`.`password` FROM `app01_userinfo`"""

distinct 去重

 res = models.Userinfo.objects.all().values('password').distinct()print(res)

order_by 排序

    res1 = models.Userinfo.objects.all().order_by('username')    # <QuerySet [<Userinfo: Userinfo object (2)>, <Userinfo: Userinfo object (1)>, <Userinfo: Userinfo object (3)>]print(res1)
"""默认升序"""

基于双下划线的查询

查询年龄大于xx

"""查看年龄大于或小于32的数据"""res = models.Userinfo.objects.filter(age__gt=32)\(age__lt=32)print(res)"""查看大于等于或小于等于32的数据"""res = models.Userinfo.objects.filter(age__gte=32)\(age__lte=32)print(res)"""查看18-32之间的数据,收尾都要"""res = models.Userinfo.objects.filter(age__range=[18, 32])print(res)"""查看带s字段的数据"""res = models.Userinfo.objects.filter(username__contains='s')print(res) # <QuerySet [<Userinfo: Userinfo object (2)>]>"""姓名以c开头或结尾startwith\endwith"""res = models.Userinfo.objects.filter(username__startswith='c')print(res)"""查看注册时间两个参数auto_now = false 当我们更新数据时,只要更新就会更新时间auto_add = False 当auto_add=True时,添加数据时会自动添加当前时间"""register_time = models.DateTimeField(auto_now=True, auto_now_add=True)


http://www.ppmy.cn/news/1221161.html

相关文章

如果面试时,问你职业规划怎么答?

对于面试官来说&#xff0c;他真的无心听你讲奋斗规划&#xff0c;问你职业规划&#xff0c;无法是想从你的言语中&#xff0c;分辨出你的稳定性&#xff0c;进取心。 1、稳定性 作为面试官&#xff0c;如果觉得你是人才&#xff0c;打算把你招进来&#xff0c;面试官最担心的…

Vue3问题:如何实现拼图验证+邮箱登录功能?前后端!

前端功能问题系列文章&#xff0c;点击上方合集↑ 序言 大家好&#xff0c;我是大澈&#xff01; 本文约3500字&#xff0c;整篇阅读大约需要5分钟。 本文主要内容分三部分&#xff0c;第一部分是需求分析&#xff0c;第二部分是实现步骤&#xff0c;第三部分是问题详解。 …

Docker(镜像、容器、仓库)工具安装使用命令行选项及构建、共享和运行容器化应用程序

文章目录 前言&#x1f31f;一、Docker工具安装&#x1f31f;二、Docker命令行选项&#x1f30f;2.1.docker run命令选项&#xff1a;&#x1f30f;2.2.docker build命令选项&#xff1a;&#x1f30f;2.3.docker images命令选项&#xff1a;&#x1f30f;2.4.docker ps命令选项…

.NET 8.0 中有哪些新的变化?

1性能提升 .NET 8在整个堆栈中带来了数千项性能改进 。默认情况下会启用一种名为动态配置文件引导优化 (PGO) 的新代码生成器&#xff0c;它可以根据实际使用情况优化代码&#xff0c;并且可以将应用程序的性能提高高达 20%。现在支持的 AVX-512 指令集能够对 512 位数据向量执…

webstorm/idea配置leetcode刷题

File -> settings -> Plugins -> 搜索leetcode 安装插件&#xff08;截图显示我已经安装过了&#xff09;&#xff0c;安装完成后点击OK操作&#xff0c;在编辑器四个边角就会出现一个leetcode的插件 File -> settings -> Tools-> Leetcode plugin 点击…

图论16-拓扑排序

文章目录 1 拓扑排序2 拓扑排序的普通实现2.1 算法实现 - 度数为0入队列2.2 拓扑排序中的环检测 3 深度优先遍历的后续遍历3.1 使用环检测类先判断是否有环3.2 调用无向图的深度优先后续遍历方法&#xff0c;进行DFS 1 拓扑排序 对一个有向无环图G进行拓扑排序&#xff0c;是将…

Leetcode hot100之“结合递归+二分“题目详解

1 总结 题目 215 (“数组中的第 K 个最大元素”) 和题目 4 (“寻找两个正序数组的中位数”) 之间的联系主要体现在它们都涉及到寻找一个有序集合中的第 k 个元素的问题。尽管这两个问题的具体应用场景和所处理的数据结构不同&#xff0c;它们共享相似的算法思想和技术。 题目…

01_SHELL编程之变量定义(二)

变量的定义 ###1. 变量的分类 本地变量&#xff1a;当前用户自定义的变量。当前进程中有效&#xff0c;其他进程及当前进程的子进程无效。 环境变量&#xff1a;当前进程有效&#xff0c;并且能够被子进程调用。 查看当前用户的环境变量 env 查询当前用户的所有变量(临时变量…