Django中ORM框架的各个操作

我们会好奇,python这么简洁的语言,数据查询是如何做的呢?我将进一步详细和深入地介绍Django中ORM框架的各个方面,包括MySQL的增删改查和复杂查询。让我们分步骤进行。

ORM框架介绍

Django的ORM框架是一个用于与数据库进行交互的工具,它将数据库表映射到Python对象上。这使得数据库操作更加抽象化,使开发人员可以使用Python代码而不是SQL来进行数据库交互。

模型定义

在Django中,数据库表由模型(Model)定义。模型是Python类,定义了数据结构以及与数据库表的映射关系。以下是一个示例模型定义:

python 复制代码
from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    publication_date = models.DateField()

数据库迁移

Django使用迁移来管理数据库结构的变化。迁移是一种机制,它将模型定义翻译成SQL,并根据模型的更改来更新数据库。迁移分为两个步骤:

  1. 创建迁移文件:运行 python manage.py makemigrations 来创建一个包含数据库模型更改的迁移文件。

  2. 应用迁移:运行 python manage.py migrate 来应用迁移文件,将更改应用到数据库。

增删改查操作

增加数据

例子1:添加新书籍
python 复制代码
new_book = Book(title="The Great Gatsby", author="F. Scott Fitzgerald", publication_date="1925-04-10")
new_book.save()
例子2:批量添加书籍
python 复制代码
books_to_add = [
    Book(title="To Kill a Mockingbird", author="Harper Lee", publication_date="1960-07-11"),
    Book(title="1984", author="George Orwell", publication_date="1949-06-08")
]
Book.objects.bulk_create(books_to_add)

查询数据

例子3:查询所有书籍
python 复制代码
all_books = Book.objects.all()
例子4:根据条件查询书籍
python 复制代码
specific_books = Book.objects.filter(author="F. Scott Fitzgerald", publication_date__year=1925)

更新数据

例子5:更新书籍信息
python 复制代码
book_to_update = Book.objects.get(title="The Great Gatsby")
book_to_update.title = "The New Gatsby"
book_to_update.save()

删除数据

例子6:删除书籍
python 复制代码
book_to_delete = Book.objects.get(title="1984")
book_to_delete.delete()

复杂查询

连接查询

例子7:查询书籍及其作者的信息
python 复制代码
books_with_author = Book.objects.select_related('author').all()

这将执行一个SQL查询,通过外键关系将书籍和作者的信息一次性获取,减少了数据库查询次数。

例子8:查询作者写的书籍
python 复制代码
author_books = Author.objects.get(name="F. Scott Fitzgerald").book_set.all()

这利用了Django的反向关系,通过作者模型获取其写的书籍。

聚合查询

例子9:计算书籍总数
python 复制代码
from django.db.models import Count

book_count = Book.objects.aggregate(total_books=Count('id'))

这使用aggregate函数计算所有书籍的数量。

例子10:找到出版日期最早的书籍
python 复制代码
earliest_book = Book.objects.order_by('publication_date').first()

这使用order_by函数按出版日期升序排列书籍,并获取第一个结果。

这些例子详细展示了Django ORM框架的不同方面,包括模型定义、数据库迁移、增删改查和复杂查询操作。您可以根据您的具体应用需求进一步探索Django的ORM功能。

相关推荐
迅猛龙办公室6 分钟前
python实现简单进度条
java·前端·python
郝学胜_神的一滴9 分钟前
AI 编程智能体 06:用Anaconda搞定Python多环境,彻底告别版本兼容灾难
人工智能·python
清水白石00810 分钟前
Python 对象模型深度解析:从“一切皆对象”到 id、type、isinstance 底层机制与小整数缓存原理
开发语言·python·缓存
for_ever_love__14 分钟前
Python 进阶——迭代器、生成器、装饰器与 asyncio
python·装饰器·生成器·大模型开发
5G微创业18 分钟前
去水印API如何实现技术变现
python·sdk·短视频
ao-weilai23 分钟前
MySQL数据库:表约束
数据库·mysql·adb
for_ever_love__27 分钟前
模块与包——import 机制与 requirements 管理依赖
python·模块·大模型开发·依赖管理
郝学胜-神的一滴28 分钟前
AI 编程智能体 05:拆解智能体分级体系、类型与全行业落地场景
开发语言·人工智能·python·程序人生·pycharm
小小张说故事31 分钟前
Python 装饰器把函数"搞丢"了?5 个必踩的坑与完整避坑对照表
后端·python
ly768940 分钟前
Redis 分布式锁的边界条件:Redlock 争议、锁续期与客户端崩溃后的互斥失效
数据库·redis·分布式·分布式锁·watchdog·redlock