使用 Django ORM 进行数据库操作

文章目录

    • 创建Django项目和应用
    • 定义模型
    • 查询数据
    • 更新和删除数据
    • 总结与进阶
      • 聚合和注解
      • 跨模型查询
      • 原始SQL查询

Django是一个流行的Web应用程序框架,它提供了一个强大且易于使用的对象关系映射(ORM)工具,用于与数据库进行交互。在本文中,我们将介绍如何使用Django ORM进行数据库操作,包括创建模型、查询数据、更新和删除等。
在这里插入图片描述

创建Django项目和应用

首先,确保你已经安装了Django。如果没有安装,可以使用以下命令进行安装:

pip install django

接下来,创建一个新的Django项目和一个应用:

django-admin startproject myproject
cd myproject
python manage.py startapp myapp

定义模型

在Django中,模型是与数据库表对应的Python类。在myapp/models.py文件中定义模型:

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()

    def __str__(self):
        return self.name

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    publish_date = models.DateField()

    def __str__(self):
        return self.title

然后,在myproject/settings.py文件中将myapp应用添加到INSTALLED_APPS列表中:

INSTALLED_APPS = [
    # ...
    'myapp',
    # ...
]

运行以下命令创建数据库表:

python manage.py makemigrations
python manage.py migrate

查询数据

使用Django ORM可以轻松地执行各种类型的数据库查询。例如,以下是一些常见的查询示例:

# 获取所有的作者
authors = Author.objects.all()

# 根据条件过滤书籍
recent_books = Book.objects.filter(publish_date__gte='2022-01-01')

# 获取单个对象
book = Book.objects.get(title='Python入门指南')

更新和删除数据

更新数据也很简单,只需使用save()方法保存修改后的对象:

book = Book.objects.get(title='Python入门指南')
book.title = 'Python进阶指南'
book.save()

要删除数据,可以使用delete()方法:

book = Book.objects.get(title='Python进阶指南')
book.delete()

总结与进阶

除了基本的数据库操作外,Django ORM还提供了许多其他高级功能,可以帮助开发人员更好地管理数据。一些拓展的内容包括:

聚合和注解

Django ORM允许使用聚合函数(如Sum、Count等)来执行复杂的数据分析操作,同时也支持使用注解(annotate)对查询结果进行标注,为结果集添加额外的信息。

from django.db.models import Count
# 计算每位作者出版的书籍数量
authors_with_book_count = Author.objects.annotate(book_count=Count('book'))

跨模型查询

通过Django ORM可以方便地进行跨模型的查询,利用ForeignKey、ManyToManyField等字段建立模型之间的关联,并且可以通过这些关联进行复杂的数据检索操作。

# 获取某个作者的所有书籍
author = Author.objects.get(name='张三')
books = author.book_set.all()

原始SQL查询

虽然Django ORM提供了强大的查询API,但有时候仍然需要执行原始的SQL查询。Django ORM允许开发人员执行原始的SQL查询,并将结果映射到模型中。

from django.db import connection
# 执行原始的SQL查询
with connection.cursor() as cursor:
    cursor.execute("SELECT * FROM myapp_author")
    row = cursor.fetchone()

通过深入学习和掌握这些进阶功能,开发人员可以更好地利用Django ORM来处理各种复杂的数据库操作,从而更高效地构建稳健的Web应用程序。

希望本文能够帮助你更全面地理解和应用Django ORM,进一步提升开发技能和应用水平!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

0基础认识C语言(理论知识)

为了给0基础一个舒服的学习路径,就有了这个专栏希望带大家一起进步。 话不多说,开始正题。 一、C语言的一段小历史 C语言的设计要追溯到20世纪60年代末和70年代初,在那个时代美国有这么一号人叫做丹尼斯.里奇,他和同事肯.汤普逊…

学习编程对英语要求高吗?

学习编程并不一定需要高深的英语水平。我这里有一套编程入门教程,不仅包含了详细的视频讲解,项目实战。如果你渴望学习编程,不妨点个关注,给个评论222,私信22,我在后台发给你。 虽然一些编程资源和文档可能…

cesium开发实例分享

反正 cesium 看到的效果几乎都有

大字体学生出勤记录系统网页HTML源码

源码介绍 上课需要一个个点名记录出勤情况,就借助AI制作了一个网页版学生出勤记录系统, 大字体显示学生姓名和照片,让坐在最后排学生也能看清楚,显示姓名同时会语音播报姓名, 操作很简单,先导入学生姓名…

AI智能体|扣子Coze文生图功能接入微信公众号

大家好,我是无界生长。 AI智能体|扣子Coze文生图功能接入微信公众号本文分享了如何将Coze平台的文生图功能接入微信公众号的详细操作流程,包括创建图像流、创建并配置Bot、设置提示词和开场白、调试、发布等步骤。如果看完还没学会的话&…

云主机选购指南:如何选择适合自己的云主机

一、认识移动云 移动云是中国移动提供的专业云服务品牌,基于移动云计算技术构建。它实现了云网一体化,确保客户享有安全可控的服务。通过充分利用移动云计算能力,打造了N31X资源布局,结合各省级数据中心,通过专线互联…

基于OrangePi AIpro的后端服务器构建

一. OrangePi AIpro简介 1.1 OrangePi AIpro外观 1.2 OrangePi AIpro配置 OrangePi AIpro(8T)采用昇腾AI技术路线,具体为4核64位处理器AI处理器,集成图形处理器,支持8TOPS AI算力,拥有8GB/16GB LPDDR4X,可以外接32GB…

VS Code开发Python配置和使用教程

在Visual Studio Code (VSCode) 中配置和使用Python进行开发是一个相对直接的过程,下面是一份简明的指南,帮助你从零开始设置环境: 1. 安装Visual Studio Code 首先,确保你已经安装了Visual Studio Code。如果还没有安装&#x…

图生文模型llava

llava-llama-3-8b-v1_1 是一个 LLaVA 模型,由 XTuner 使用 ShareGPT4V-PT 和 InternVL-SFT 从 meta-llama/Meta-Llama-3-8B-Instruct 和 CLIP-ViT-Large-patch14-336 进行微调。 https://huggingface.co/xtuner/llava-llama-3-8b-v1_1-gguf

AURIX TC3xx单片机介绍-启动过程介绍1

从各个域控制器硬件解决方案来看,MPU可能来自多个供应商,有瑞萨,有NXP等,但对于MCU来说,基本都采用英飞凌TC3xx。 今天我们就来看一下TC3xx的启动过程,主要包含如下内容: uC上电过程中,会经过一个上电时序,从复位状态“脱离”出来;Boot Firmware是复位后第一个执行的…

设置 border 边框单侧样式 - HarmonyOSNext

设置 border 边框单侧样式,通过 api 中查看 border(value: BorderOptions): T; BorderOptions 又包含了若干个子属性 1.width?: EdgeWidths | Length; 2.color?: EdgeColors | ResourceColor; 3.radius?: BorderRadiuses | Length; 4.style?: EdgeStyles | BorderStyle; 其…

【Docker】docker-compose 常用命令

启动服务: docker-compose up 如果你想在后台运行服务,可以添加 -d 标志: docker-compose up -d 开启所有服务 docker-compose start 停止服务: docker-compose down 查看服务状态: docker-compose ps 查看…

React(4): 使用 unocss + react-ts + vite 开发

React(4): 使用 unocss react ts 开发 之前一直使用 css-module 开发页面,觉得太过繁琐,看到 unocss , 眼前一亮,觉得可以拿来快速开发页面(偷懒) vite官网 unocss tailwindcss 说明 该方法需要对 tailwindcss 有一…

ROS学习笔记(16):夹缝循迹

0.前言 在笔记的第15期对巡墙驾驶的原理进行了简单讲解,而这期我们来讲一下夹缝循迹,也常被叫follow the gap,也更新一些概念。 1.探索式路径规划与避障 1.概念 无预先建图的路径规划叫探索式路径规划,例如巡墙循迹和夹缝循迹&…

操作系统 - 文件管理

文件管理 考纲内容 文件 文件的基本概念;文件元数据和索引节点(inode) 文件的操作:建立,删除,打开,关闭,读,写 文件的保护;文件的逻辑结构;文件的物理结构目录 目录的基…

ubuntu_概念

su(switch user) wget(Web Get) cd(change directory) dpkg(Debian Packager)为 “Debian” 专门开发的套件管理系统,方便软件的安装、更新及移除。 chmod(Change Mode)用于改变文件或目录的权限 ps(Process Status)进程状态 grep(Global Regular Expression Print)…

Linux shell编程学习笔记50:who命令

0 前言 2024年的网络安全检查又开始了,对于使用基于Linux的国产电脑,我们可以编写一个脚本来收集系统的有关信息。比如,我们可以使用who命令来收集当前已登陆系统的用户信息,当前运行级别等信息。 1. who命令 的功能、格式和选项…

亚马逊高效广告打法及数据优化,亚马逊高阶广告打法课

课程下载:https://download.csdn.net/download/m0_66047725/89342733 更多资源下载:关注我。 课程内容: 001.1-亚马逊的广告漏斗和A9算法的升级变化.mp4 002.2-流量入口解析和广告的曝光机制.mp4 003.3-标签理论 .mp4 004.4-不同广告类…

AI智能体研发之路-模型篇(四):一文入门pytorch开发

博客导读: 《AI—工程篇》 AI智能体研发之路-工程篇(一):Docker助力AI智能体开发提效 AI智能体研发之路-工程篇(二):Dify智能体开发平台一键部署 AI智能体研发之路-工程篇(三&am…

计算机组成原理易混淆知识点总结(持续更新)

目录 1.机器字长,存储字长与指令字长 2.指令周期,机器周期,时钟周期 3.CPI,IPS,MIPS 4.翻译程序和汇编程序 5.计算机体系结构和计算机组成的区别和联系 6.基准程序执行得越快说明机器的性能越好吗? 1.机器字长,存储字长与指令字长 不同的机器三者…