ORM
ORM简介
- MVC框架中有一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库
ORM是“对象-关系-映射”的简称,主要任务是:
- 根据对象的类型生成数据库表结构
- 将对象、列表的操作,转换为sql语句
- 将sql查询到的结果转换为对象、列表
为什么使用ORM
Django和其他大多数现代Web框架一样,依赖一个强大的DAO(data access object),视图将底层的关系数据库和Python的面向对象特质联系起来。
使用ORM有4个充分的理由:
封装有用的方法
Django模型对象是定义变量的首选方式,而变量通常对应的是数据库的列。
你可以请求一个 id 为 5 的Author对象并检查其 author.name
, 而不必去写SELECT name from authors WHERE id=5
这样的SQL语句, 这样要 Pythonic
的多。
而且,模型对象能给那个简陋的例子增加许多额外的价值,Django的ORM可以让你定义任何实例方法:
- 定义只读的变量或者属性集合,也称为 数据集合
data aggregation
或者计算属性calculated attribute
. - Django的ORM允许重写内置的数据库修改方法,例如保存和删除对象.
- 和编程语言集成(python)通常比较简单,可以让你的数据库对象和特定的接口或API更加一致
可移植性
ORM作为应用程序和数据库之间的代码层,通常具有很好的可移植性.
安全性
使用ORM之后很少有机会需要自己执行SQL查询,所以不必担心保护性很差的查询字符串导致的问题,如SQL注入攻击等
而且ORM还提供一个智能化的引用和转义输入变量的核心机制,让你不在花很多时间来处理这种细枝末节
表现力
跟直接编写SQL相比,ORM最大的好处就是从数据库中获取记录时使用的查询语法。高级一点的语法不仅更容易编写,而且这种带入到Python领域的查询机制更带来了一系列有用的技巧和方法。比如,直接循环一个数据结构,原本在SQL中是相当笨拙的,现在却简洁的多,还可以回避本来是无可避免的讨厌的字符串操作。