Django ORM 的核心部件可分为模型系统 、查询系统 、数据库后端 和辅助工具四大类,每个部件负责不同的职责,共同实现对象与关系数据库的映射。以下是核心部件的分层解析:
一、模型系统(Model System)
1. 模型基类(Model Base Class)
- 作用:所有模型类的基类,提供ORM核心功能。
- 核心类 :
django.db.models.Model - 关键特性 :
- 通过元类(
ModelBase)解析模型字段和元数据。 - 自动生成主键字段(
id)。 - 提供对象级的数据库操作方法(如
save()、delete())。
- 通过元类(
2. 字段类(Field Classes)
- 作用:定义模型字段与数据库列的映射关系。
- 核心类 :
- 基础字段:
CharField、IntegerField、BooleanField等。 - 关系字段:
ForeignKey、ManyToManyField、OneToOneField。 - 特殊字段:
DateTimeField、DecimalField、FileField等。
- 基础字段:
- 关键特性 :
- 负责数据类型转换(如Python
datetime→ SQLTIMESTAMP)。 - 处理字段约束(如
null、unique、max_length)。 - 通过
validators实现数据验证。
- 负责数据类型转换(如Python
3. 元数据类(Meta Class)
-
作用:定义模型的数据库级元数据。
-
核心属性 :
db_table:指定数据库表名。indexes:定义索引。ordering:默认排序规则。unique_together:联合唯一约束。
-
示例 :
pythonclass Book(models.Model): class Meta: db_table = "books" indexes = [models.Index(fields=["title"])]
二、查询系统(Query System)
1. 查询集(QuerySet)
- 作用:表示从数据库获取的对象集合,支持链式操作。
- 核心类 :
django.db.models.query.QuerySet - 关键方法 :
- 过滤:
filter()、exclude()、get()。 - 排序:
order_by()、reverse()。 - 切片:
queryset[0:10](不触发SQL)。 - 聚合:
count()、sum()、avg()。
- 过滤:
- 特性:惰性执行,仅在需要数据时生成SQL。
2. 查询表达式树(Query Expression Tree)
-
作用:存储查询条件的抽象语法树。
-
核心类 :
django.db.models.sql.Query -
关键组件 :
WhereNode:表示SQL的WHERE子句。OrderBy:表示排序规则。Join:处理表连接逻辑。
-
示例 :
python# 表达式树结构:[Filter(author="Doubao"), OrderBy("-price")] Book.objects.filter(author="Doubao").order_by("-price")
3. 查询表达式(Query Expressions)
-
作用:定义复杂查询条件。
-
核心类 :
Q()对象:实现复杂逻辑(如OR条件)。F()表达式:引用模型字段值(如F('price') * 0.9)。Func()表达式:调用数据库函数(如UPPER(title))。
-
示例 :
pythonfrom django.db.models import Q, F # 查询价格大于50且作者是Doubao,或价格小于20的书 Book.objects.filter(Q(price__gt=50) & Q(author="Doubao") | Q(price__lt=20))
三、数据库后端(Database Backends)
1. 数据库连接(Database Connection)
-
作用:管理与数据库的物理连接。
-
核心类 :
django.db.backends.*.base.DatabaseWrapper -
支持的数据库 :
- PostgreSQL:
django.db.backends.postgresql - MySQL:
django.db.backends.mysql - SQLite:
django.db.backends.sqlite3 - Oracle:
django.db.backends.oracle
- PostgreSQL:
-
配置示例 :
pythonDATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', } }
2. SQL 编译器(SQL Compiler)
-
作用:将查询表达式树转换为数据库特定的SQL。
-
核心类 :
django.db.backends.*.compiler.SQLCompiler -
关键方法 :
as_sql():生成SQL语句和参数。execute_sql():执行SQL并返回结果。
-
示例 :
python# Python 查询 Book.objects.filter(author="Doubao") # PostgreSQL 生成的 SQL SELECT "books"."id", "books"."title", "books"."author" FROM "books" WHERE "books"."author" = 'Doubao';
3. 模式生成器(Schema Editor)
- 作用:根据模型定义生成数据库模式(表、索引、约束)。
- 核心类 :
django.db.backends.*.schema.BaseDatabaseSchemaEditor - 关键方法 :
create_model():创建表。alter_field():修改字段。delete_model():删除表。
四、辅助工具(Utility Components)
1. 事务管理器(Transaction Management)
-
作用:管理数据库事务。
-
核心类 :
django.db.transaction.atomic -
使用方式 :
pythonfrom django.db import transaction with transaction.atomic(): Book.objects.create(title="New Book") # 嵌套事务 with transaction.atomic(): Book.objects.filter(price__lt=10).delete()
2. 数据库路由器(Database Router)
-
作用:实现多数据库的路由策略。
-
核心接口 :
django.db.router.BaseRouter -
示例配置 :
pythonclass MyRouter: def db_for_read(self, model, **hints): if model._meta.app_label == 'analytics': return 'analytics_db' return 'default'
3. 迁移系统(Migrations)
-
作用:管理数据库模式变更。
-
核心组件 :
makemigrations:生成迁移文件。migrate:执行迁移。Migration类:表示一次模式变更。
-
迁移文件示例 :
pythonclass Migration(migrations.Migration): dependencies = [('myapp', '0001_initial')] operations = [ migrations.AddField( model_name='book', name='is_published', field=models.BooleanField(default=False), ), ]
五、核心部件协作流程
- 模型定义 :开发者定义继承自
Model的类,声明字段和元数据。 - 查询构建 :通过
objects管理器创建QuerySet,添加过滤、排序条件。 - SQL 生成 :
Query对象将查询条件转换为表达式树,由SQLCompiler生成SQL。 - 数据库交互 :
DatabaseWrapper建立连接,执行SQL并获取结果。 - 结果映射:将数据库行数据转换为模型对象或值列表。