首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

看源码——records库批注

作为一名励志成为python大牛的人,最近有点困惑。

嗯,不知道该怎么往下深入了。

听过python界有个大神,Kenneth Reitz,代码敲得好,还会摄影,关键是人长得还帅。

就是下面这个人。

人比人,气死人。但我有一点比他厉害,我汉语说的好。

我就去看了他写的驰名中外的requests库,打算学习学习经验。于是打开了github一看,代码太多,顺手就刷起了微博。

但是,作为一名励志成为python大牛的人,能遇到困难就放弃吗?不能。

这时候,我发现大神竟然有一个系列的for Humans,这还了得,赶紧去观摩一下。

然后就找到了records——SQL for Humans,代码只有500多行,正适合我下手,赶紧来看看。

records库地址去github上搜。

先看怎么用。

连接数据库,执行查询。

输出一行记录用,会显示。

Record是什么,应该是一条记录相关的类,来看看源码。

代码中一共有四个类:Record、RecordCollection、Database、Connection。不用说,Record应该是单个记录,RecordCollection是多条记录的类,Database和Connection就是连接数据库执行查询相关的类。

先来看Database类,一个方法一个方法的过。

初始化方法,获取数据库连接,引擎等,没什么好说的。

close方法,关闭数据库。

接下来有两个特殊方法,和,竟然没见过,赶紧去查了查官方手册。

这两个是上下文管理器的特殊方法,什么是上下文管理器?使用语法的就是。

比如你要打开文件,

不用考虑write之后文件是否关闭,它会自己关。这其中的奥秘,就在于和。

负责入口,赋值给的fp,负责出口,在完成工作后退出。

这样,连上数据库查询完之后自己就关了,多好。

接下来,

方法,展示给用户的,跳过。

,获得表名,跳过。

,调用了Connection类,实例化一个对象,看来Database是Connection类的一个包装。

下面的query、bulk_query都是调用的Connection类中的方法,查询数据库用,跳过。

这里需要注意,

使用了上下文管理器,看来Connection类中也定义了 和。

然后是 方法,

注意 装饰器,这个是干嘛用的?

在【流畅的python】一书中有专门的介绍,

装饰器能减少创建上下文管理器的样板代码量。因为不用编写一个完整的类, 定义enterexit方法, 而只需实现有一个 yield 语句的生成器, 生成想让enter方法返回的值。

yield之前的代码由 方法管着,之后的由 管着。

可以这样用: 。

enter之后获得conn,调用Connection类中的transaction方法,这个方法中只有一行代码,调用begin方法, 。然后exit的时候,commit、rollback。

Database类到此结束,继续看Connection类。

这个类才是负责真正的数据库连接,查询用的。

前几个方法与Database中的类似,跳过。

方法,查询数据库。

方法里面调用了 和 ,这两个类后面再看。

下面几个方法没啥好说的,跳过。

大神写的代码就是不一样,各种高级用法。

写了这么多字,好累。另外两个类有空再看。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180603A0TS0B00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券