Django(七、模型层)

news2024/10/6 1:37:22

文章目录

  • 模型层
      • 模型层前期准备
            • 使用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 django
    django.setup()

代码演示:

tests.py

# manage.py中拷贝前四行代码
import os
import sys
if __name__=='__main__':  # 需要在__name__下运行
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoProject6.settings')# 1.引入django配置文件
    # 手写两行
    import django
    django.setup()  # 2.启动django
	# 导入app01文件夹内models文件并 测试models文件内User运行
    from app01 import models
    models.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最后>>>拷贝代码放在settings

LOGGING = {
    '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 django
    django.setup()  # 2.启动django
    from app01 import models
    res = 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])  # jack
    print(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 或者40
    res = 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.coloradmin.cn/o/1214407.html

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

相关文章

【汇编】mov和add指令、确定物理地址的方法、内存分段表示法

文章目录 前言一、学习汇编指令——用中学1.1 汇编指令分析汇编输出分析 二、确定物理地址的方法2.1 什么叫做物理地址2.2 8086中的物理地址2.3 8086CPU给出物理地址的方法2.4 “段地址16偏移地址物理地址”的本质含义 三、内存分段表示法3.1 用分段的方式管理内存3.2 同一段内…

SAM分割模型的5个典型用例

Meta AI 于2023 年推出的分割任意模型 (SAM) 彻底改变了我们对图像分割的质量标准。 给定输入图像&#xff0c;SAM 尝试分割图像中的所有对象并生成分割掩模。 使用 SAM&#xff0c;你可以分割对象&#xff0c;然后&#xff0c;可以使用模型来利用该信息&#xff0c;例如用于为…

Spring cloud负载均衡@LoadBalanced LoadBalancerClient

LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…

kubectl 本地远程链接k8s多个集群,远程管控多集群,查看日志 部署服务(windows版)

文章目录 一、前言二、windows上安装kubectl和mobaxterm2.1 准备安装包2.2 安装kubectl2.3 链接k8s集群2.4 查看某一个pod的容器日志2.5 切换context 上下文配置&#xff0c;实现在多个k8s集群间动态切换 一、前言 现如今是一个万物皆上云 的时代&#xff0c;各种云层出不穷&am…

【Rust】快速教程——从hola,mundo到所有权

前言 学习rust的前提如下&#xff1a; &#xff08;1&#xff09;先把Rust环境装好 &#xff08;2&#xff09;把VScode中关于Rust的插件装好 \;\\\;\\\; 目录 前言先写一个程序看看Rust的基础mut可变变量let重定义覆盖变量基本数据类型复合类型&#xff08;&#xff09;和 [ …

3.1 Windows驱动开发:内核远程堆分配与销毁

在开始学习内核内存读写篇之前&#xff0c;我们先来实现一个简单的内存分配销毁堆的功能&#xff0c;在内核空间内用户依然可以动态的申请与销毁一段可控的堆空间&#xff0c;一般而言内核中提供了ZwAllocateVirtualMemory这个函数用于专门分配虚拟空间&#xff0c;而与之相对应…

加密狗作用是什么?工作原理及使用方法

加密狗是一种用于软件保护的硬件设备&#xff0c;通常被用于防止软件被非法复制、篡改或者恶意使用。以下是加密狗的作用、工作原理及使用方法&#xff1a; 作用 加密狗的主要作用是提供软件保护&#xff0c;它能够通过加密算法对软件进行加密&#xff0c;以防止软件被非法复制…

Linux学习第42天:Linux RS232/485/GPS 驱动实验:天外来客

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 Linux的学习笔记今天更新到了第42天。鉴于国往笔记内容整理中出现的问题&#xff0c;我尽量按照平时学习时笔记的要求进行优化。尽量不再大段大段的贴代码。而是…

Ubuntu18.04平台下Qt开发程序打包的一些问题总结

目录 前言 一、在Ubuntu18.04开发环境下打包有两种方式 1、利用linuxdeployqt软件进行打包 2、利用编写shell脚本的方式进行打包 二、详细介绍shell脚本打包的方式 1、新建一个空的文件夹 2、准备脚本copylib.sh 3、准备脚本xxxx.sh。 4、给上述两个脚本添加可执行权限…

Behave介绍和快速示例

Behave是一个用于行为驱动开发 (Behavior-Driven Development, BDD) 的 Python 库。使用 Behave&#xff0c;可以编写自然语言格式的使用场景来描述软件的行为&#xff0c;然后用 Python 实现这些场景下的步骤&#xff0c;形成可直接运行的测试。 Behave的目标是帮助用户、开发…

【Machine Learning in R - Next Generation • mlr3】

本篇主要介绍mlr3包的基本使用。 一个简单的机器学习流程在mlr3中可被分解为以下几个部分&#xff1a; 创建任务 比如回归、分裂、生存分析、降维、密度任务等等挑选学习器&#xff08;算法/模型&#xff09; 比如随机森林、决策树、SVM、KNN等等训练和预测 创建任务 本次示…

JVM——类加载器(JDK8及之前,双亲委派机制)

目录 1.类加载器的分类1.实现方式分类1.虚拟机底层实现2.JDK中默认提供或者自定义 2.类加载器的分类-启动类加载器3.类加载器的分类-Java中的默认类加载器4.类加载器的分类-扩展类加载器5.类加载器的分类-类加载器的继承 2.类加载器的双亲委派机制 类加载器&#xff08;ClassLo…

Vue3.3 + Vite4.3 + TypeScript5+ Element-Plus:从零到一构建企业级后台管理系统(前后端开源)

vue3-element-admin 是基于 vue-element-admin 升级的 Vue3 Element Plus 版本的后台管理前端解决方案&#xff0c;技术栈为 Vue3 Vite4 TypeScript Element Plus Pinia Vue Router 等当前主流框架。 相较于其他管理前端框架&#xff0c;vue3-element-admin 的优势在于一…

笔记本配USB拓展坞网卡经常时不时掉线

ThinkPad X1 Carbon大概是2015年的老笔记本,自己买的USB3.0拓展坞(带网卡)的,我的笔记本不带网卡, 使用网线时不时右下角显网络掉线 , 就掉了,各种排查排除,不是线,路由器,拓展坞问题,最后更新拓展坞网卡芯片驱动,解决问题.下面是步骤: 搜索关键字:Realtek USB GbE Family Cont…

OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)

文章目录 OpenCV的色彩空间——RGB与BGROpenCV的色彩空间——HSV与HSLHSV主要用于OpenCV中HSL OpenCV色彩空间转换YUV主要用于视频中题目 图像操作的基石Numpy【基础操作】np.arraynp.zerosnp.onesnp.fullnp.identitynp.eye Numpy基本操作之矩阵的检索与赋值Numpy基本操作三——…

c# - - - Application.StartupPath(程序安装目录)和Environment.CurrentDirectory(程序工作目录)

Application.StartupPath 应用程序的安装目录&#xff0c;不会改变。 在C:\Users\Administrator\source\repos\ConsoleApp6\bin\Debug目录中&#xff0c;运行ConsoleApp6.exe。 安装目录为&#xff1a;C:\Users\Administrator\source\repos\ConsoleApp6\bin\Debug 在C:\Users…

Git相关: 拉取、git push提交 过程遇到的错误

目录 解决git push报错error: RPC failed; HTTP 413 curl 22 关于这个问题&#xff0c;其实千万别用gitlab,因为你怎么推送 也不可能把几G的文件推上去。 error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 se 解决git push报错error: RPC failed;…

【外汇天眼】解析外汇交易平台:深度了解DD与NDD两大模式

外汇交易平台种类繁多&#xff0c;涵盖不同的分类与运营模式&#xff0c;令投资者难以甄别&#xff0c;也增加了选择的难度。为了解决这一问题&#xff0c;我们将更深入地了解外汇平台的多样性。 在线外汇交易平台主要分为两大类&#xff1a;处理平台模式&#xff08;Dealing …

springcloud仓库管理系统源码

开发技术&#xff1a; jdk1.8&#xff0c;mysql5.7&#xff0c;idea&#xff0c;nodejs&#xff0c;vscode springcloud springboot mybatis vue elementui 功能介绍&#xff1a; 统计分析&#xff1a;查看产品&#xff0c;销售数量&#xff1b;统计近7日出入库统计 客户管…

RHCE8 资料整理(六)

RHCE8 资料整理 第 6 篇 软件管理第 23 章 用rpm管理软件23.1 rpm查询23.2 rpm卸载23.3 软件包升级23.4 rpm验证 第 24 章 用yum/dnf管理软件包24.1 yum架构介绍24.2 用光盘搭建yum源24.3 创建私有仓库24.4 yum客户端配置24.5 yum基本使用24.5.1 查询24.5.2 安装与卸载24.5.3 下…