基本介绍
records是kennethreitz的for Humans系列,使用原生sql去操作大多数的关系型数据库(Postgresql, MySQL, SQLite, Oracle和 MS-SQL),并且支持多种格式输出,如csv、excel、json等。
代码不超过1000行,如果是第一次尝试阅读python开源项目,这是一个很好的选择。作者Kennethreitz是requests的作者,python领域的大牛人物之一,关于他还有一个励志的故事[Kenneth Reitz的逆袭之路]
使用方法
records库的使用非常简单且人性化,定义数据库连接串和sql语句,然后将返回值作为rows打印出来,或者输出为文件,没有复杂的orm逻辑,实现逻辑很清晰
依赖库
records有一些pip依赖,每个依赖项的作用如下:
源码分析工具
建议的源码分析工具:pycharm3.x (运行调试)+ Source Insight 4.0(展示类/变量/方法结构图)
Source insight是一款很不错的阅读源码的工具,支持很多语言,有些人说好像3版本默认不支持python,需要配置,我下载的 Source Insight 4.0,没这个问题,打开就可以用。
代码结构
Database类:
封装基本数据库操作,主要使用query方法,调用SQLAlchemy的方法,获取结果后调用Record类获得Record生成器,再调用RecordCollection获得所有的结果
Record类:
接收database查询后的keys和rows,初始化时,检测是否长度一致,然后对其包装,使其支持迭代,支持直接to_dict转为dict对象,支持直接export导出。
RecordCollection类:
部分方法和Record类相同,但RecordCollection实现了first方法,获取第一个row,如果不存在,则默认default为none,如果defalut本身就是实例或者exception的子类,直接抛出异常,另外,实现了一次实例化后多次查询时的缓存。
全局变量和方法:
基础概念:
基础概念:
测试DEMO