sqlobject是一个orm框架
基本组成
SQLObject:数据类通过继承该类获取orm能力,用户层代码主要基于这个类的api操作数据库
SelectResult:查询结果的抽象,以懒加载的形式处理查询结果
DBConnection:数据库连接的抽象
大致可以分为三层:API层、中间层(构建sql等)、数据库交互层
查询执行过程
以查询18岁的学生为例
class StudentDao(SQLObject): class sqlmeta: table = 'student' name = StringCol() age = IntCol()
-
StudentDao.selectBy(age=18)
-
根据查询条件拼接sql
DBAPI._SO_columnClause
-
构造SelectResult实例,作为懒加载的查询结果返回
初始化过程会对排序、范围查询
-
用户代码遍历SelectResult结果获取数据时才会触发向数据库发起查询
SelectResult.__iter__=>SelectResult.lazyIter
-
获取数据库连接
-
构造dbconnection.Iteration,该迭代器负责真正的查询数据迭代过程
执行查询获取cursor,并通过cursor查出一条条记录
-
通过dbconnection.Iteration获取所有查询结果,放到list中
-
将包含查询结果的list重新包装成一个迭代器,用户代码每遍历一次则从list中获取一条记录
-
整体来看,SQLObject的查询过程为:
SQLObject=>SelectResult=>DBAPI=>dbconnection.Iteration=>DBAPI._executeRetry