Python-ORM 理论基础

Python-ORM 理论基础

一、ORM理论基础:

  • ORM(Object-Relational Mapping ,对象关系映射) 的作用是在关系型数据库业务实体对象之间做一个映射,这样开发者在操作数据库时,就不需要再去和复杂的SQL语句打交道,只需简单地操作对象的属性和方法
  • ORM具备三方面的基本能力:映射技术、CRUD操作、缓存优化

1.映射技术:

  • 面向对象是从软件工程的基础原则(耦合、聚合、封装)的基础上发展而来的,而关系数据库从数据理论的基础上发展而来的,两套理论存在显著的区别,ORM通过映射机制将两种技术联系起来

  • ORM库都必须解决如下3个映射问题:

    1.数据类型映射:将数据库的类型映射为编程语言自身的类型。数据类型映射解决了由数据表列类型向编程语言类型转换的问题。

    2.类映射:将数据定义映射为编程语言自身的类,数据表中的每一条记录就可以映射为一个编程语言自身的对象。因为数据表的定义本身在每个业务场景中各不一样,所以需要开发者通过配置文件或代码文件的方式明确类映射。

    3.关系映射:将数据库中基于外键的关系连接转换为编程语言中基于对象引用的关系连接。

2.CRUD操作:

  • CURD是做数据库处理时的增加(Create)、读取(Retrieve,重新得到数据)、更新(Update)、删除(DELETE)几个单词的首字母的简写。

  • 在SQL中通过,Insert、Select、Update、Delete四种语句实现CRUD。

  • 大多数据库会为数据对象提供,insert、update、delete、query等函数实现CRUD,并提供beginTransaction、commit、rollback等函数管理事务。当开发者调用这些函数时,ORM自动执行以下操作:

    1.将这些调用转换SQL语句。

    2.通过数据库引擎发送给数据库执行。

    3.将数据库返回的结果记录用ORM映射技术转换为对象。

3.缓存优化:

  • 由于数据库操作通常比较耗时,所以大多数ORM提供数据库缓存优化的功能,最基本的缓存优化能力如下:

    1.将从数据库中查询到的数据以类对象的形式保存在内存中,以便之后再用时随时提取。

    2.在真正需要读取查询结果时才执行数据库的select操作,而不是在ORM查询命令执行时查询数据库。

4.为什么使用ORM?

  • 总结ORM优点,就知道为什么要使用ORM:

    1.向开发者屏蔽了数据库的细节,使开发者无须与SQL语句打交道,提高了开发效率。

    2.便于数据库迁移。由于每种数据库的SQL语法有细微差别,所以基于SQL的数据访问层在更换数据库时通常需要花费大量的时间调试SQL语句。而ORM提供了独立于SQL的接口,ORM引擎会处理不同数据库之间的差异,所以迁移数据库时无须更改代码。

    3.应用缓存优化等技术有时可以提高数据库操作的效率。

二、Python ORM库介绍:

  • ORM在开发者和数据库之间建立了一个中间层,把数据库中的数据转换成了Python中的对象实体,这样屏蔽了不同数据库之间差异性,又使开发者很方便地操作数据库中的数据,而且可以使用面向对象的高级特性。

  • Python中提供ORM支持的组件有很多,每个组件的应用领域有区别,但是数据库操作的理论是相同的。

  • 下面简单介绍下Python数据库的ORM框架:

    1.SQLAlchemy:是Python中最成熟的ORM框架,资源和文档都很丰富。大多数Python的Web框架对其都有很好支持,能够胜任大多数应用场合。被认为Python事实上ORM标准

    2.Django ORM:是Python世界中大名鼎鼎的Django Web 框架独用的ORM技术。Django是一个大而全的框架,这使灵活性大大降低。其他Python的Web框架可以随意更换ORM,但在Django中不能这么做,因为Django内置很多的model是用Django内置ORM实现

    3.Peewee:小巧灵活,是一个轻量级ORM。Peewee是基于SQLAlchemy内核开发的,整个框架只由一个文件构成。Peewee提供了对多种数据库的访问方式,比如:SQLite、Mysql、PostgreSQL,适用于功能简单的小型网站。

    4.Storm:是一个中型的ORM库,比如SQLAlchem和Django等轻量,比Peewee的功能更丰富。Storm要求开发者编写数据表DDL(数据定义语言:创建、删除表结构的语言)代码,而不能直接从数据表类定义中自动生成表定义

    5.SQLObject:与SQLAlchemy相似,也是一套大而全的ORM。SQLObject的特点是其设计借鉴了Ruby On Rails 的 ActiveRecord模型。

猜你喜欢

转载自blog.csdn.net/Fe_cow/article/details/90648783