ORM (Object Relational Mapper)
通常, 数据库都是关系型数据库, 表, 就是个二维结构的数据, 但是在写程序的时候通常都是 面向对象的思想, 如何将表结构变为 类 和 推荐, 因此, 引入了ORM.
这是一件蛮有意思的事情, 因为这是2个形式系统做了个转化. 很多理念啊, 范式各不相同, 但是可以通过ORM进行转化.
-
ORM提供了一种方式, 使数据库表 可以 变成 类, 每一行数据都是一个对象, 产生一种映射关系, 那么, 我们写程序的时候 只要关注如何操作类和对象就可以了, 无须关注底层的sql语句之类的东西.
-
在SQLAlchemy中, 包含了一个叫做 unit of work的东西, "一个可以透明地同步对象和相关行之间状态变化的系统", 就是, 当对某个对象进行操作时, 通过unit of work对数据库表里的对应的行做相应的操作(增, 改, 删). 然后这里面有个有意思的地方:
问: 数据库持久化时, 会将 对对象的操作产生sql语句(update啊, insert啊这些), 然后如果一条一条执行, 会非常慢, 于是通常都是批量执行, 那么一个批次中, 总有前后顺序的问题, 如果所有的语句都是互相不干预的, 那没什么问题, 但是, 如果遇到外键的时候, 要停下来先去执行外键的操作, 那该如何生成这个批次的顺序?
答: unit of work中, 将所有的操作(包括外键), 当成有向无环图, 然后用拓扑排序来排顺序. -
在SQLAlchemy中, 也提供了一套query的系统, 通过类的方式去做查询操作.
网友评论