当前位置: 首页 > news >正文

Django学习笔记二:数据库操作详解

Django框架提供了一个功能强大的ORM(对象关系映射)系统,使得开发者可以使用Python代码来操作数据库,而无需编写复杂的SQL语句。以下是Django数据库操作的一些基本概念和方法:
在这里插入图片描述

模型定义

在Django中,模型是对数据库表的抽象。每个模型都是一个Python类,继承自django.db.models.Model。模型中的每个属性都对应数据库表中的一个字段。

from django.db import modelsclass Blog(models.Model):title = models.CharField(max_length=200)content = models.TextField()pub_date = models.DateTimeField(auto_now_add=True)

数据库迁移

当你定义或修改了模型后,需要创建迁移文件,并将这些变更应用到数据库中。

  • 创建迁移文件:
    python manage.py makemigrations
    
  • 应用迁移到数据库:
    python manage.py migrate
    

CRUD操作

  • 创建:创建一个新的记录。
    blog = Blog(title='My first blog', content='This is my first blog post.')
    blog.save()
    
  • 读取:查询数据库中的记录。
    blogs = Blog.objects.all()  # 获取所有记录
    blog = Blog.objects.get(id=1)  # 获取特定记录
    
  • 更新:修改已存在的记录。
    blog = Blog.objects.get(id=1)
    blog.title = 'My updated blog'
    blog.save()
    
  • 删除:删除记录。
    blog = Blog.objects.get(id=1)
    blog.delete()
    

查询集(QuerySet)

QuerySet是Django ORM返回的一种数据结构,用于表示数据库查询的结果集。它支持链式调用,可以进行过滤、排序、限制等操作。

  • 过滤:
    blogs = Blog.objects.filter(title__contains='Django')
    
  • 排除:
    blogs = Blog.objects.exclude(is_published=False)
    
  • 排序:
    blogs = Blog.objects.order_by('pub_date')
    
  • 限制:
    blogs = Blog.objects.all()[:10]  # 获取前10条记录
    

复杂查询

Django ORM支持更复杂的查询操作,如关联查询、聚合查询等。

  • 关联查询:
    from django.db.models import Count
    author_count = Author.objects.annotate(book_count=Count('book')).filter(book_count__gt=1)
    
  • 聚合查询:
    from django.db.models import Avg
    average_book_count = Author.objects.aggregate(avg_books=Avg('book__count'))
    

使用原生SQL

虽然Django ORM非常强大,但在某些情况下,你可能需要执行原生SQL语句。

  • 使用raw()方法:
    blogs = Blog.objects.raw('SELECT * FROM myapp_blog WHERE title LIKE "%Django%"')
    
  • 使用cursor()方法:
    from django.db import connection
    with connection.cursor() as cursor:cursor.execute('SELECT * FROM myapp_blog WHERE title LIKE %s', ['%Django%'])blogs = cursor.fetchall()
    

注意事项

  • 尽量使用Django ORM提供的抽象方法来操作数据库,这样可以保证代码的可读性和数据库的兼容性。
  • 当使用原生SQL时,需要特别注意SQL注入的风险。
  • 在进行数据库操作时,应该注意异常处理,避免因为数据库操作导致程序崩溃。

以上是Django数据库操作的一些基本概念和方法,更多详细信息可以参考Django的官方文档。

相关文章:

Django学习笔记二:数据库操作详解

Django框架提供了一个功能强大的ORM(对象关系映射)系统,使得开发者可以使用Python代码来操作数据库,而无需编写复杂的SQL语句。以下是Django数据库操作的一些基本概念和方法: 模型定义 在Django中,模型是…...

Spring Boot 应用开发案例:在线书籍管理系统

Spring Boot 应用开发案例,涵盖从项目搭建到具体实现,包括常用的数据库操作、Restful API 开发、Spring Security 安全认证以及前后端分离架构。这个案例将以开发一个简单的“在线书籍管理系统”为例,介绍如何从头开始搭建项目、实现增删改查功能,并通过 JWT 进行用户认证。…...

阿里140滑块-滑块验证码逆向分析思路学习

一、声明! 原创文章,请勿转载! 本文内容仅限于安全研究,不公开具体源码。维护网络安全,人人有责。 文章中所有内容仅供学习交流使用,不用于其他任何目的,均已做脱敏处…...

使用 Linux 搭建并配置一个 NFS 服务器

目录 1. 安装相关软件包2. 启动并启用相关服务3. NFS 配置文件3.1 /etc/exports 文件3.2 共享目录3.3 客户端列表3.4 参数选项3.4.1 访问权限选项3.4.2 数据写入硬盘模式3.4.3 root 用户权限3.4.4 子树检查3.4.5 匿名用户3.4.6 安全性(特权端口)3.4.7 网络传输3.4.x 更多 (More…...

python发包

Python 中我们经常会用到第三方的包,默认情况下,用到的第三方工具包基本都是从 Pypi.org 里面下载。这些第三方的包都是开发者们发布的自己的库。我们有自己的想法,或者有一些常用的方法想要分享出去,就可以发布自己的库&#xff…...

农行1面:说说 final,finally,finalize的区别

你好,我是猿java。 在 Java中,“final”、“finally”和“finalize”是三个不同的关键字或方法,尽管它们的名字相似,但在功能和用途上却有显著的区别,这篇文章我们继续分析一篇农行1面的题目:说说 final&a…...

ChatGPT实时语音将于本周向免费用户推出:OpenAI DevDay 2024详细解读

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…...

一个月学会Java 第7天 字符串与键盘输入

Day7 字符串与键盘输入 字符串作为所有程序都很重要的东西,这个东西必须好好的学习,在Java中String会比较好学习,比起C和C里面会更加的简单, 在Java之中也是很好理解的,因为底层已经封装好了char数组,也就是…...

Java后端面试题(day16)

目录 java常见的引用类型java中深拷贝和浅拷贝如何设计一个秒杀系统?谈一下对高并发的理解,平时怎么处理高并发问题?Comparable和Comparator区别?解决hash冲突有哪些方法?Synchronized锁的升级过程 java常见的引用类型 java的引用类型一般分…...

Auto-Animate:是一款零配置、即插即用的动画工具,可以为您的 Web 应用添加流畅的过渡效果

嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 用户体验成为了检验产品成功与否的关键因素。而动画效果,作为提升用户体验的重要手段,在网页和应用开发中扮演着举足轻重的角色…...

k8s之ingress-nginx-controller安装

作者:程序那点事儿 日期:2024/01/30 01:25 要在master节点上安装 helm repo add ingress-nginx Welcome - Ingress-Nginx Controller helm search repo ingress-nginx helm pull ingress-nginx/ingress-nginx --version 4.4.2 mv ingress-nginx-4.4.…...

力扣SQL仅数据库(1098~1132)

1098 小众书籍 需求 编写解决方案,筛选出过去一年中订单总量 少于 10 本 的 书籍,并且 不考虑 上架距今销售 不满一个月 的书籍 。假设今天是 2019-06-23 。 返回结果表 无顺序要求 。 数据准备 Create table If Not Exists Books (book_id int, nam…...

优惠点餐api接口对接的具体步骤是什么?

优惠点餐API接口对接的具体步骤通常包括以下几个阶段: 需求分析:明确对接的目标和需求,例如实现在线点餐、订单管理、支付集成等 。选择API服务提供商:根据业务需求选择合适的点餐API服务提供商 。注册和获取API密钥:…...

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【297-313】

文章目录 297. super基本语法297.1 基本介绍297.2 基本语法 298. super使用细节1299. super使用细节2300. super使用细节3301. 方法重写介绍302. 方法重写细节303. 重写课堂练习1304. 重写课堂练习2输出结果: 姓名:田所浩二 年龄:24305. 养宠物引出多态3…...

快递批量查询物流追踪只揽收无物流信息的单号

在电子商务和物流领域,快递单号的追踪是确保货物顺利送达的关键环节。然而,在实际操作中,经常会遇到一些只显示揽收信息而没有后续物流更新的单号,这给商家和买家都带来了不小的困扰。本文将介绍如何通过快递批量查询物流的方法&a…...

【动态网站资源保存下载】

文章目录 概要解决思路技术细节小结 概要 我们在网上浏览网站时,经常有这样的需求:将浏览的网页保存下来,即使无网的情况下也可以继续浏览。比如一些教育类网站的PPT,内容为HTML格式的,无法作为PPT格式下载下来&#…...

Selenium自动化测试中如何处理数据驱动?

在自动化测试中,数据驱动(Data-Driven Testing)是指通过外部数据源(如Excel、CSV、数据库等)来控制测试用例的执行,而不是直接在代码中硬编码数据。这种方式可以提高测试的灵活性和可维护性,使得…...

淘宝API接口系列有哪些内容?

淘宝API(Application Programming Interface)接口系列是一套允许开发者与淘宝平台进行数据交互的接口集合,涵盖了商品信息、订单信息、物流信息、用户信息以及营销等多个方面的数据接口。以下是对淘宝API接口系列内容的详细归纳: …...

华为OD机试 - 冠亚军排名(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷D卷A卷B卷C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加…...

VmWare中安装CenterOs(内网服务器)

VmWare中安装CenterOs(内网服务器) 文章目录 VmWare中安装CenterOs(内网服务器)[toc] 一 、CentOS 7的下载与安装1、下载2、安装(1)前期准备(2)正式安装 开始等待!!! 二、软件仓库更换1、root用…...

c++如何通过重定向rdbuf来捕获第三方库的日志输出到文件【详解】.txt

...

DIY便携UV美甲灯:从电路设计到3D打印的完整制作指南

1. 项目概述:为什么选择DIY一个便携UV美甲灯?如果你和我一样,是个喜欢自己动手做美甲,同时又对电子制作和3D打印有点“手痒”的爱好者,那你肯定对市面上那些笨重、必须插电的UV美甲灯感到过不满。它们要么像个小型烤箱…...

终极免费开源项目管理指南:如何用GanttProject高效规划复杂项目?

终极免费开源项目管理指南:如何用GanttProject高效规划复杂项目? 【免费下载链接】ganttproject Official GanttProject repository. 项目地址: https://gitcode.com/gh_mirrors/ga/ganttproject 想要免费、开源且功能强大的项目管理工具吗&#…...

创业公司如何利用taotoken的token plan套餐控制ai研发成本

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 创业公司如何利用Taotoken的Token Plan套餐控制AI研发成本 对于早期科技创业公司而言,产品创新与成本控制是两条必须并…...

告别原生标题栏!用Qt 6.x打造一个可拖拽、可美化的自定义标题栏(附完整源码)

Qt 6.x自定义标题栏实战:从零构建高颜值可拖拽界面组件 当你在开发一款专业级桌面应用时,系统默认的标题栏往往会成为整体UI设计的短板。不同操作系统下的标题栏风格各异,无法与应用主体保持视觉统一,更难以实现个性化的交互效果。…...

杰理之叠加正弦波(SIN)提示音音量大小不一样【篇】

SDK音量调节默认自带淡入淡出。...

在自动化部署流程中集成 TaoToken 大模型 API 调用

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在自动化部署流程中集成 TaoToken 大模型 API 调用 将大模型能力融入自动化部署流程,正成为提升 DevOps 效率的新范式。…...

手把手教你用TTL线刷救活咪咕MGV3200盒子(GK6323V100C芯片/安卓9系统)

咪咕MGV3200盒子救砖全指南:从TTL焊接到底层刷机实战 当你的咪咕MGV3200电视盒子因为一次鲁莽的卡刷操作变成"砖头",指示灯不再亮起,屏幕一片漆黑时,那种绝望感只有经历过的人才能体会。不同于普通刷机教程,…...

备战蓝桥杯别只刷题了!用2023年JavaB组真题手把手教你锻炼“竞赛思维”

从2023年蓝桥杯JavaB组真题看竞赛思维的三大核心能力 在算法竞赛的征途上,许多选手常常陷入"题海战术"的误区,认为刷题数量直接决定比赛成绩。然而,2023年第十四届蓝桥杯JavaB组的真题却向我们揭示了一个更深刻的真相:竞…...

40希尔排序 - 以递减间距进行插入排序

希尔排序 - 以递减间距进行插入排序 040希尔排序:用长距离跳跃打破速度壁垒📰 5W1H 发明者故事 Who(何人)- 发明者是谁? 发明者:唐纳德希尔(Donald L. Shell) 背景:希尔…...