踩风火轮的乌龟 2020-04-30
ORM(Object Relational Mapping):对象关系映射,通过创建一个类与数据库的表相对应,类的对象代指数据库中的一行数据。让用户不再写SQL语句,而是通过类以及对象的方式,和其内部提供的方法,进行数据库操作。
功能:把用户输入的类或对象转换成SQL语句,转换之后通过pymysql执行完成数据库的操作。
优点:提高开发效率,降低开发成本;使开发更加对象化;可移植;方便地引入数据缓存之类的附加功能
不足之处:在处理多表联查、where条件之类的复杂查询时,ORM的语法会变得复杂,就需要写入原生SQL
面向对象编程和关系型数据库,都是目前最流行的技术,但是它们的模型是不一样的。面向对象编程把所有实体看成对象(object),关系型数据库则是采用实体之间的关系(relation)连接数据。很早就有人提出,关系也可以用对象表达,这样的话,就能使用面向对象编程,来操作关系型数据库。
简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。
ORM 把数据库映射成对象。
数据库的表(table) --> 类(class)
记录(record,行数据)--> 对象(object)
字段(field)--> 对象的属性(attribute)
举例来说,下面是一行 SQL 语句。
SELECT id, first_name, last_name, phone, birth_date, sex FROM persons WHERE id = 10
程序直接运行 SQL,操作数据库的写法如下。
res = db.execSql(sql); name = res[0]["FIRST_NAME"];
改成 ORM 的写法如下。
p = Person.get(10); name = p.first_name;
一比较就可以发现,ORM 使用对象,封装了数据库操作,因此可以不碰 SQL 语言。开发者只使用面向对象编程,与数据对象直接交互,不用关心底层数据库。
总结起来,ORM 有下面这些优点。
但是,ORM 也有很突出的缺点。
CRUD 操作
数据库的基本操作有四种:create(新建)、read(读取)、update(更新)和delete(删除),简称 CRUD。
ORM 将这四类操作,都变成了对象的方法。
6.1 查询
前面已经说过,find()方法用于根据主键,获取单条记录(完整代码看这里)或多条记录(完整代码看这里)。
// 返回单条记录 // demo02.js Customer.find(1) // 返回多条记录 // demo05.js Customer.find([1, 2, 3])
where()方法用于指定查询条件(完整代码看这里)。
// demo04.js Customer.where({Company: ‘Apple Inc.‘}).first()
如果直接读取类,将返回所有记录。
// 返回所有记录 const customers = await Customer;
但是,通常不需要返回所有记录,而是使用limit(limit[, offset])方法指定返回记录的位置和数量(完整代码看这里)。
// demo06.js const customers = await Customer.limit(5, 10);)
上面的代码制定从第10条记录开始,返回5条记录。
6.2 新建记录
create()方法用于新建记录(完整代码看这里)。
// demo12.js Customer.create({ Email: ‘‘,
FirstName
: ‘Donald‘, LastName: ‘Trump‘, Address: ‘Whitehouse, Washington‘ })
6.3 更新记录
update()方法用于更新记录(完整代码看这里)。
// demo13.js const customer = await Customer.find(60); await customer.update({ Address: ‘Whitehouse‘ });
6.4 删除记录
destroy()方法用于删除记录(完整代码看这里)。
// demo14.js const customer = await Customer.find(60); await customer.destroy();