sqlobject源码分析

sqlobject是一个orm框架

基本组成

SQLObject:数据类通过继承该类获取orm能力,用户层代码主要基于这个类的api操作数据库

SelectResult:查询结果的抽象,以懒加载的形式处理查询结果

DBConnection:数据库连接的抽象

大致可以分为三层:API层、中间层(构建sql等)、数据库交互层

查询执行过程

以查询18岁的学生为例

class StudentDao(SQLObject):
    class sqlmeta:
        table = 'student'
    name = StringCol()
    age = IntCol()
  1. StudentDao.selectBy(age=18)

  2. 根据查询条件拼接sql

    DBAPI._SO_columnClause

  3. 构造SelectResult实例,作为懒加载的查询结果返回

    初始化过程会对排序、范围查询

  4. 用户代码遍历SelectResult结果获取数据时才会触发向数据库发起查询

    SelectResult.__iter__=>SelectResult.lazyIter
    1. 获取数据库连接

    2. 构造dbconnection.Iteration,该迭代器负责真正的查询数据迭代过程

      执行查询获取cursor,并通过cursor查出一条条记录

    3. 通过dbconnection.Iteration获取所有查询结果,放到list中

    4. 将包含查询结果的list重新包装成一个迭代器,用户代码每遍历一次则从list中获取一条记录

整体来看,SQLObject的查询过程为:

SQLObject=>SelectResult=>DBAPI=>dbconnection.Iteration=>DBAPI._executeRetry

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值