Django 模型层及ORM介绍二

news2024/9/30 3:30:44

数据库迁移文件混乱的解决方法

数据库中django_migrations表记录了migrate的‘全过程’,项目各应用中的migrate文件与之对应,否则migrate会报错

解决方案:

1、删除所有migrations里所有的000?_xxxx.py(__init__.py除外)
2、删除数据库。
3、重新创建数据库
4、重新生成migrations里所有的000?_xxxx.py
    python3 manage.py makemigrations
5、重新更新数据库
    python3 manage.py migrate

ORM-操作-创建(插入)数据

ORM CRUD核心 -> 模型类. 管理器对象
管理器对象
    每个继承自models.Model的模型类,都会有一个objects对象被同样继承下来。
Django ORM使用一种直观的方式把数据库表中的数据表示成python对象
创建数据中每一条记录就是创建一个数据对象
方案1
MyModel.objects.create(属性1=值1,属性2=值1,...)—— 属性即字段
    成功:返回创建好的实体对象
    失败:抛出异常
代码示例
方案2
创建MyModel实例对象,并调用save()进行保存
obj = MyModel(属性=值,属性=值)—— 属性即字段
obj.属性=值
obj.save()
Django Shell

ORM—查询数据操作

更多案例参考官方文档: https://docs.djangoproject.com/zh-hans/2.2/ref/models/querysets/#field-lookups
all()方法——输出所有字段值
案例1:
案例2:格式化输出
可以在模型类中定义__str__方法,自定义QuerySet中的输出格式
例如 在Book模型类下定义如下:
则在Django shell中可得到如下显示输出
案例3:values('列1','列2'..)——输出 指定 字段
案例4:values_list('列1','列2'...)
案例5:order_by()——排序
组合排序
转换SQL语句
练习1:
1、在应用下创建视图函数
2、创建HTML文件生成表格,并引入模型类数据
3、在主路由进行路由分发
4、在应用下创建子路由文件
5、最后查看

条件查询-方法

filter(条件)——过滤筛选
filter案例
当多个属性在一起时为"与"关系

exclude(条件)——取非
排除掉清华大学出版社
get(条件)
异常案例:出现多条结果
异常案例:查询不到数据
正常显示:一条数据

非等值查询

查询谓词
查询id大于3的数据
转换成SQL语句

更新数据

更新单个数据
案例:修改id为1,price字段的值
批量更新数据
练习2-制作更新书籍的页面
点击“查看所有书籍”页面中的‘更新’进入更新页面

视图函数update_book

url http://127.0.0.1:8000/bookstore/update_book/<book_id>
更新页中显示当前书籍信息,且能对定价和零售价进行修改
views.py
def update_book(request,book_id):
    #bookstore/update_book/1
    try:
        book = Book.objects.get(id=book_id)
    except Exception as e:
        print('--update book error is %s'%(e))
        return HttpResponse('--The book is not exitsted')

    if request.method == 'GET':
        return render(request,'bookstore/update_book.html',locals())

    elif request.method == 'POST':
       
        price = request.POST['price']
        market_price = request.POST['market_price']

        #改
        book.price = price
        book.market_price = market_price
        #保存
        book.save()
        return HttpResponseRedirect('/bookstore/all_book')
update_book.html
<body>

    <form action="/bookstore/update_book/{{ book.id }}" method="post">
        <P>
            title <input type="text" value="{{ book.title }}" disabled="disabled">
        </P>
        <p>
            pub <input type="text" value="{{ book.pub }}" disabled="disabled">
        </p>
        <p>
            price <input type="text" name="price" value="{{ book.price }}">
        </p>
        <p>
            market_price <input type="text" name="market_price" value="{{ book.market_price }}">
        </p>
        <p>
            <input type="submit" value="更新">
        </p>
    </form>
</body>

单个数据删除

删除单个案例:
批量删除
伪删除
练习3-制作“删除书籍”的页面
views.py
 

F对象和Q对象

F对象
一个F对象代表数据库中的 某条记录的字段的信息
作用:
    通常是对数据库中的 字段值在不获取的情况下进行操作
    用于类属性(字段)之间的比较
语法:
案例-查询零售价大于定价的书籍
案例2-比较
结论:传统的方法需要取出值才能比较,F对象则省略取值步骤直接比较,效率高。
Q对象
当在获取查询结果集 使用复杂的 逻辑或 |、逻辑非~  等操作时可以借助与Q对象进行操作。
 作用  在条件中用来实现除and(&)以外的or(|)或not(~)操作
案例:
总结
F对象——标记字段
Q对象——或与非

聚合查询和原生数据库操作

ROM聚合查询
    聚合查询是指对一个数据表中的一个字段的数据进行部分或者全部进行统计查询,查bookstore_book数据表中的全部书的平均价格,查询所有书的总个数等,都要使用聚合查询。
聚合查询分为:
    整表聚合
        不带分组的聚合查询是指导将全部数据进行集中统计查询
    分组聚合
分组聚合是通过计算查询结果中每一个对象所关联的对象集合,从而得出总计值(也可以是平均值或总和),即为查询集的每一项生成聚合。
通过返回结果的QuerySet.annotate方法分组聚合得到分组结果
    QuerySet.annotate(别名=聚合函数('列名'))

原生数据库操作

SQL注入
使用原生语句时小心SQL注入
定义:用户通过数据上传,将恶意SQL语句提交给服务器,从而达到攻击效果
SQL注入防范
原生数据库操作-cursor
完全跨过模型类操作数据库-查询/更新/删除
1、导入cursor所在的包
    from django.db import connection
2、用创建cursor类的构造函数创建cursor对象,在使用cursor对象。
3、为保证再出现异常时能释放cursor资源,通常使用with语句进行创建操作
示例

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

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

相关文章

【模拟集成电路】环路滤波器(LPF)设计

环路滤波器 LPF 设计 前言环路滤波器设计仿真结果各部分链接链接&#xff1a;前言 本文主要内容是对环路滤波器 模块设计设计进行阐述&#xff0c;LPF在电荷泵频率综合器中&#xff0c;主要作用是进行滤波&#xff0c;消除毛刺&#xff0c;因此一个简单的RC就可以起到很好的效果…

软件设计的“SOLID”五大原则

一、单一职责 1、定义 单一职责原则&#xff08;single Responsibility Principle,SRP&#xff09;规定&#xff0c;每一个软件单元&#xff0c;其中包括组件、类和函数&#xff0c;应该只有一个单一且明确定义的职责。 2、特点 一个类应该仅有一个引起它变化的原因&#x…

JavaScript HTML DOM 改变 HTML

文章目录JavaScript HTML DOM 改变 HTML改变 HTML 输出流改变 HTML 内容改变 HTML 属性JavaScript HTML DOM 改变 HTML HTML DOM 允许 JavaScript 改变 HTML 元素的内容。 改变 HTML 输出流 JavaScript 能够创建动态的 HTML 内容&#xff1a; 今天的日期是&#xff1a; Thu …

JDBC-API详解、SQL注入演示、连接池

文章目录JDBC1&#xff0c;JDBC概述1.1 JDBC概念1.2 JDBC本质1.3 JDBC好处2&#xff0c;JDBC快速入门2.1 编写代码步骤2.2 具体操作3&#xff0c;JDBC API详解3.1 DriverManager3.2 Connection &#xff08;事务归我管&#xff09;3.2.1 获取执行对象3.2.2 事务管理3.3 Stateme…

SQL语句 -非空约束 - 唯一约束 - 主键约束 - 默认约束 -外键约束

文章目录约束约束介绍和分类非空约束唯一约束主键约束默认约束案例练习外键约束约束 约束介绍和分类 约束的概念: 约束是作用于表中列上的规则&#xff0c;用于限制加入表的数据 约束的存在保证了数据库中数据的正确性、有效性和完整性 约束的分类如下: 约束名称描述关键字非…

代码随想录【Day25】| 216. 组合总和 III、17. 电话号码的字母组合

216. 组合总和 III 题目链接 题目描述&#xff1a; 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数&#xff0c;并且每种组合中不存在重复的数字。 说明&#xff1a; 所有数字都是正整数。 解集不能包含重复的组合。 示例 1: 输入: k 3, n 7 输…

从中国文化看面试挑人标准

文章目录标准一、面相1. 1 四白眼1.2 浓眉二、讲话2.1 言多与气虚总结本文结合中国面相&#xff0c;是个概率性问题&#xff0c;对于个体无效。 标准 正直&#xff0c;三观正&#xff0c;沟通好&#xff0c;技术。从概率上讲&#xff1a; 正直且三观正的人----有恒心&#x…

Python带你制作一个属于自己的多功能音乐播放器

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 就是用Python做一个简易的音乐播放器&#xff0c;废话不多说&#xff0c;咱们直接开干 当然&#xff0c;今天做这个肯定不是最简单的&#xff0c;最简单的音乐播放器&#xff0c;9行代码足以 完整源码等直接在文末名片领…

剑指 Offer 08. 二叉树的下一个结点

摘要 二叉树的下一个结点_牛客题霸_牛客网 给定一个二叉树其中的一个结点&#xff0c;请找出中序遍历顺序的下一个结点并且返回。注意&#xff0c;树中的结点不仅包含左右子结点&#xff0c;同时包含指向父结点的next指针。下图为一棵有9个节点的二叉树。树中从父节点指向子节…

【SpringBoot】简单的文件上传和文件下载以及图片回显

前言 小编我将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注一下&#xff01;也许一个人独行&#xff0c;可以走的很快&#xff0c;但是一群人结伴而行&#xff0c;才能走的更远&#xff01;让我们在成长的道路上互相学习&#…

k8s全解

目录说明Kubernetes介绍应用部署方式演变kubernetes简介kubernetes组件kubernetes概念kubernetes集群环境搭建安装方式kubeadm二进制包集群类型安装要求最终目标准备环境环境初始化服务部署kubeadm中的命令(一般用不着)资源管理YAML语言介绍资源管理方式命令式对象管理kubectl命…

【涨薪技术】0到1学会性能测试 —— 参数化关联

前言 上一次推文我们分享了性能测试工作原理、事务、检查点&#xff01;今天给大家带来性能测试参数化&#xff0c;检查点知识&#xff01;后续文章都会系统分享干货&#xff0c;带大家从0到1学会性能测试&#xff0c;另外还有教程等同步资料&#xff0c;文末免费获取~ 01、性…

什么是分布式锁?几种分布式锁分别是怎么实现的?

一、什么是分布式锁&#xff1a; 1、什么是分布式锁&#xff1a; 分布式锁&#xff0c;即分布式系统中的锁。在单体应用中我们通过锁解决的是控制共享资源访问的问题&#xff0c;而分布式锁&#xff0c;就是解决了分布式系统中控制共享资源访问的问题。与单体应用不同的是&am…

python语音识别whisper

一、背景 最近想提取一些视频的字幕&#xff0c;语音文案&#xff0c;研究了一波 二、whisper语音识别 Whisper 是一种通用的语音识别模型。它在不同音频的大型数据集上进行训练&#xff0c;也是一个多任务模型&#xff0c;可以执行多语言语音识别以及语音翻译和语言识别。 …

Chat Support Board WordPress聊天插件 v3.5.8

功能列表 支持和聊天功能 Slack聊天完全同步 - 直接从Slack发送和接收用户信息。 立即工作 - 只需插入短码&#xff0c;即可立即安装和使用。 丰富的信息 - Dialogflow机器人发送丰富的信息。 机器人--集成一个由API.AI驱动的多语言机器人。 电子邮件通知 - 当收到回复时&#…

JUC 之 比较交换 CAS

—— CAS&#xff08;Compare And Swap&#xff09; 没有 CAS 之前&#xff0c;多线程环境下不使用原子类保证线程安全 i&#xff0c;只能通过 synchronized 加锁的方式&#xff0c;高并发多写情况下&#xff0c;性能影响很大&#xff1b;使用 CAS 之后&#xff0c;可以使用原子…

公司对不同职级能力抽象要求的具体化

要先把当前级别要求的能力提升到精通&#xff0c;然后尝试做下一级别的事情。 但可能不确定高一级的能力要求究竟怎样&#xff0c;不同Title&#xff0c;如“工程师”“高级工程师”和“资深工程师”等。但这样 Title 对我们理解不同级别的能力要求&#xff0c;完全无用。“高…

RecycleView详解

listview缓存请看: listview优化和详解RecycleView 和 ListView对比&#xff1a;使用方法上ListView&#xff1a;继承重写 BaseAdapter&#xff0c;自定义 ViewHolder 与 converView优化。RecyclerView: 继承重写 RecyclerView.Adapter 与 RecyclerView.ViewHolder。设置 Layou…

【华为OD机试模拟题】用 C++ 实现 - 英文输入法(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 分积木(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 吃火锅(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - RSA 加密算法(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 构成的正方形数量(2023.Q1) 【华为OD机试模拟…

计算机组成原理考研题精选

运算 1 D状态寄存器of,cf,sf,zf看结果&#xff0c;数据总线传输数据&#xff0c;Alu是核心器件&#xff0c;地址寄存器是存储器件 2 (74条消息) 【细碎知识1】浮点数的规格化_SinHao22的博客-CSDN博客_浮点数规格化 (74条消息) IEEE754 浮点数&#xff1a;简读案例秒懂_theR…