Django 对象关系映射(ORM)源码详解
前言
从前面已经知道,一个request的到来和一个对应response的返回的流程,数据处理和数据库离不开.我们也经常在views.py的函数定义中与数据库打交道.
djangoORM源代码组织结构
对于数据库,django有自己的一套ORM(对象关系映射),或许其他的框架可以随意更换ORM,但django不建议这么做.因为django内置有很多的model,这些model无疑是用django内置ORM实现的,如果更换后,内置的model就无效了,除非以下两个选择:
你已经吃透了django的ORM,定制自己的ORM,但必须用里面的规则,比如类的属性名等等;
又或者更换自己的ORM,不使用django内置的model.
django是一个大而全的框架,但大而全却又增加了它本身的负担,使其灵活性大大降低.所以你看,高内聚低耦合不容易做到.
数据库本身的复杂的,数据库操作涉及的选项有很多,一个ORM也并不简单.django数据库部分在django.db中实现,在展开之前先介绍一下它的源代码文件组织:
django.db ----backends各种数据库后端实现 ----dummy哑后端,什么都不做,定义空方法 ----mysqlmysql实现 ----oracleoracle实现 ----..... ----models重头戏,backends中各种数据库都是基于此实现的 ----fields数据库表字段实现 ----..... ----sql语句,记录sql语句的各种选项,where等,最后生成sql语句;连接数据库得到结果 ----..... ----aggregates.py聚合相关 ----base.py定义Model类 ----constants.py一些常量 ----deletion.py数据库表项的删除实现 ----expressions.py表达式类,where会出现表达式 ----loading.py ----manager.pyORM的管理器 ----options.py数据库表选项,譬如主键等 ----query.py数据库查询集类 ----query_utils.py小工具 ----related.py与`表关联`相关 ----signals.py ----__init__.py
djangoORM底层的实现都在django.db.models中.如你所知,数据库操作的选项很多,这里并不专注展开这些选项在djangoORM中是如何实现的,而将展开的是djangoORM的实现的框架,当用djangoORM执行一个简单的查询操作时,里面是如何工作的,工具类之间是如何协调的.了解这些,使用djangoORM会更游刃有余.
我已经在github备份了Django源码的注释:Decode-Django,有兴趣的童鞋fork吧.