Django系列 | [6]ORM django fsm
liuian 2024-12-17 15:01 47 浏览
下面会从这几部分来介绍ORM:
- Django ORM简介
- Django ORM的安装和配置
- 基本操作
- 数据查询
- 多表关联
- 数据库迁移
- 总结
1. Django ORM简介
Django ORM(Object Relational Mapping)是Django框架自带的一种ORM工具,用于将Python对象映射到数据库中的关系数据模型中。使用Django ORM,你可以通过Python对象来对数据库进行操作,而无需编写原始的SQL语句。
Django ORM提供了许多有用的特性,如对象关系映射、数据库迁移和查询API等。在使用Django ORM时,你不必关心底层数据库的操作,而只需定义模型类和查询条件即可。
2. Django ORM的安装和配置
Django ORM是Django框架自带的工具,因此不需要额外安装。但是,在使用Django ORM之前,你需要确保你已经安装了Django框架,并在settings.py文件中配置了数据库连接。
下面是一个简单的数据库配置示例,其中使用了SQLite数据库:
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
3. 基本操作
在使用Django ORM之前,你需要定义模型类来表示数据库中的表。模型类需要继承自django.db.models.Model类,并定义字段和属性。下面是一个简单的模型类定义示例:
# models.py
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
pub_date = models.DateField()
price = models.DecimalField(max_digits=5, decimal_places=2)
上面的代码定义了一个名为Book的模型类,它有四个字段:title、author、pub_date和price。其中,title和author是CharField类型的字段,用于存储字符串类型的数据;pub_date是DateField类型的字段,用于存储日期类型的数据;price是DecimalField类型的字段,用于存储十进制数类型的数据。
在定义完模型类后,你需要使用Django的ORM API来对数据库进行操作。下面是一些常见的ORM操作示例:
创建数据
要创建一个新的Book对象并将其保存到数据库中,可以使用以下代码:
book = Book(title='The Great Gatsby', author='F. Scott Fitzgerald', pub_date='1925-04-10', price=25.00)
book.save()
更新数据
要更新数据库中的现有对象,可以使用以下代码:
book = Book.objects.get(pk=1)
book.title = 'The Catcher in the Rye'
book.save()
删除数据
要从数据库中删除现有对象,可以使用以下代码:
book = Book.objects.get(pk=1)
book.delete()4. 数据查询
Django ORM提供了一组强大的查询API,可以用于从数据库中检索数据。以下是一些常见的查询操作示例:
获取所有对象
要从数据库中获取一个模型类的所有对象,可以使用以下代码:
books = Book.objects.all()
根据条件获取对象
要根据条件从数据库中获取一个或多个对象,可以使用以下代码:
# 获取title为'1984'的Book对象
book = Book.objects.get(title='1984')
# 获取pub_date在2022年之后的所有Book对象
books = Book.objects.filter(pub_date__gt='2022-01-01')
对查询结果进行排序
要对查询结果进行排序,可以使用以下代码:
# 获取所有Book对象,并按照价格从低到高排序
books = Book.objects.all().order_by('price')
对查询结果进行聚合
要对查询结果进行聚合操作,可以使用以下代码:
from django.db.models import Avg, Max, Min, Sum
# 获取所有Book对象的价格平均值
avg_price = Book.objects.all().aggregate(Avg('price'))
# 获取所有Book对象的价格最高值和最低值
max_price = Book.objects.all().aggregate(Max('price'))
min_price = Book.objects.all().aggregate(Min('price'))
# 获取所有Book对象的价格总和
total_price = Book.objects.all().aggregate(Sum('price'))
5. 多表关联
在实际应用中,一个模型类通常会与其他模型类存在关联。Django ORM提供了一组强大的多表关联API,可以用于表示和管理模型类之间的关系。以下是一些常见的多表关联操作示例:
一对多关系
假设有一个Author模型类和一个Book模型类,它们之间是一对多的关系(即一个作者可以写多本书)。可以使用ForeignKey字段来表示这种关系:
class Author(models.Model):
name = models.CharField(max_length=50)
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
在上面的代码中,Book模型类包含一个ForeignKey字段,它引用了Author模型类。on_delete=models.CASCADE参数表示当关联的Author对象被删除时,与之相关的Book对象也将被删除。
要获取一个Author对象的所有Book对象,可以使用以下代码:
author = Author.objects.get(pk=1)
books = author.book_set.all()
多对多关系
假设有一个Book模型类和一个Tag模型类,它们之间是多对多的关系(即一本书可以有多个标签,一个标签也可以应用于多本书)。可以使用ManyToManyField字段来表示这种关系:
class Tag(models.Model):
name = models.CharField(max_length=50)
class Book(models.Model):
title = models.CharField(max_length=100)
tags = models.ManyToManyField(Tag)
在上面的代码中,Book模型类包含一个ManyToManyField字段,它引用了Tag模型类。Django ORM会自动创建一个中间表,用于存储Book和Tag之间的关联关系。
要获取一个Book对象的所有Tag对象,可以使用以下代码:
book = Book.objects.get(pk=1)
tags = book.tags.all()
一对一关系
假设有一个Person模型类和一个Passport模型类,它们之间是一对一的关系(即每个人只有一个护照,每个护照也只属于一个人)。可以使用OneToOneField字段来表示这种关系:
class Person(models.Model):
name = models.CharField(max_length=50)
class Passport(models.Model):
number = models.CharField(max_length=50)
person = models.OneToOneField(Person, on_delete=models.CASCADE)
在上面的代码中,Passport模型类包含一个OneToOneField字段,它引用了Person模型类。on_delete=models.CASCADE参数表示当关联的Person对象被删除时,与之相关的Passport对象也将被删除。
要获取一个Person对象的Passport对象,可以使用以下代码:
person = Person.objects.get(pk=1)
passport = person.passport
6. 数据库迁移
在实际应用中,模型类经常需要进行修改。Django ORM提供了一个称为“数据库迁移”的机制,可以帮助我们轻松地将这些修改应用到数据库中。以下是一些常见的数据库迁移操作示例:
创建迁移文件
要创建一个迁移文件,可以使用以下代码:
python manage.py makemigrations
该命令将自动检测模型类的更改,并创建一个迁移文件,用于记录这些更改。迁移文件将保存在一个名为“migrations”的目录中。
应用迁移文件
要将迁移文件应用到数据库中,可以使用以下代码:
python manage.py migrate
该命令将自动执行迁移文件中的操作,并将更改应用到数据库中。
回滚迁移文件
如果需要回滚迁移文件(即撤消已应用的更改),可以使用以下代码:
python manage.py migrate app_name <migration_name>
其中,app_name是模型类所在的应用程序名称,migration_name是要回滚的迁移文件的名称。
7. 总结
本教程介绍了Django ORM的基本用法,包括定义模型类、数据增删改查、多表关联和数据库迁移等方面。Django ORM是Django框架的核心组件之一,它提供了一组强大的API,可以帮助我们轻松地与数据库进行交互。
相关推荐
- 戴尔官方原版oem镜像(戴尔镜像文件在哪里)
-
您好戴尔电脑恢复出厂设置的方法如下:(1)、开机进入系统前,按F8,进入Windows7的高级启动选项,选择“修复计算机”。(2)、选择键盘输入方法。(3)、如果有管理员密码,需要输入;如果没有设置...
- 装系统的软件(装系统)
-
打开黑鲨装机大师,点击【一键装机】,这里选择【系统重装】黑鲨会优先检测本地环境是否符合装机条件,检测完毕后点击下一步进入了【选择系统】画面,在这里选择win1064位纯净绿色最新版,然后点击【安装此...
-
- windows安全模式进不去(windows安全模式进不去怎么办)
-
电脑安全模式进不去的原因大多数都是硬盘出现了故障或者是系统不能兼容导致的。还有一种原因就是电脑中了木马病毒,这种情况下要想办法重启进行杀毒就好了。现在将电脑进行重新启动,再看季的时候按F8这个功能键,当然不是每个牌子的电脑进入安全模式的按键...
-
2026-01-01 11:05 liuian
- 台式电脑配置查询(台式机配置查询)
-
查看电脑硬件配置信息方法 1、首先右键单击计算机——属性,进入电脑属性选项卡! 2、在属性选项卡里可看到基本的CPU及内存配置,更详细的配置资料点...
- winpe免安装版(pe系统免安装)
-
在没有WinPE系统的电脑上安装WinPE,首先需要确保你的电脑有一个能正常启动的操作系统,因为所有接下来的操作都在本地操作系统下进行。然后,你需要准备一个8G或16G的U盘,用于存储WinPE系统,...
- 系统下载到哪个盘里(系统安装到哪个盘)
-
事实上你把软件装有哪里都是没有问题。我是在电脑城工作的电脑维修员,对于电脑资料的存放我们一般是这么定义的。C盘,装系统。D盘,装软件,主要装在D:/programfilesE盘,装文档,比如一些DOC...
- qq账号怎么改密码(qq怎么改帐号密码)
-
你可以把什么软件全关了创造一个环境这个环境的要求是网络稳定然后你点击QQ的系统设置它会有一个绿色通道直接改密只要密码知道就可以改密方法一:通过游戏修改直接在游戏登录界面点...
- 笔记本电脑配置怎么看显卡(笔记本电脑如何查看显卡配置)
-
1、首先打开控制面板,win10和win7打开控制面板的方式可能不一样,右键点击我的电脑,然后点击属性。2、在弹出的属性界面中,找到左上方的控制面板主页,然后点击它打开控制面板页面。3、打开控制面板后...
- 迅雷ios老版本安装包(迅雷ios老版本下载)
-
①可能是该版本的软件已经下架了。或者说没有服务器去支持该软件版本进行运转。②可能该软件版本过低导致的一些故障问题,使得没有多少用户愿意去下载和使用。③手机系统版本不支持用户使用软件的这类版本。因此用户...
- win7c盘哪些文件可以删(w7c盘里面有哪些文件是可以删除的)
-
windows7清理c盘隐藏文件的方法如下1、首先打开电脑,点击打开电脑桌面上的“我的电脑”。2、然后在弹出来的窗口中点击打开“本地磁盘(C)”。3、然后在弹出来的窗口中点击打开左上角组织中的“文件...
- word2016是免费的吗(word2016版什么样)
-
对啊下载,安装输入序列号才能使用区别在于特点不同,office2016采用了高端拼接的方式呈现。整体更加时尚动感,辨识度极高,保留性能的同时也兼顾了不错的规格设计。2021稳重之中带着犀利,硬朗的线条...
- 如何修改路由器(如何修改路由器密码)
-
要修改无线路由器,您需要登录到路由器的管理界面。以下是如何进行的步骤:1.打开浏览器并输入路由器的IP地址。通常默认为192.168.1.1或192.168.0.1。如果不确定,请参考路由器的用户手...
- 电脑看视频卡是什么原因(电脑看视频非常卡)
-
网速原因,网速太慢会导致电脑看视频会卡。2、看视频的时候有其他程序在运用。3、电脑垃圾太多。4、电脑中病毒了。电脑看视频太卡怎么办:1、首先要确定是不是网速的原因,如果是网速慢,那么建议看视频选择“流...
-
- 哪个笔记本品牌性价比高(那个品牌笔记本电脑性价比最高)
-
有以下几款【微软SurfacePro6】SurfacePro6定位商务办本,二合一笔记本,它有足够惊人的外观,C面材质也使它具有很高的认知度,足够的性能完全可以满足用户的日常使用。产品采用英特尔酷睿i58系列CPU,主频1.6GH...
-
2026-01-01 05:55 liuian
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
