作为一名励志成为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】一书中有专门的介绍,
装饰器能减少创建上下文管理器的样板代码量。因为不用编写一个完整的类, 定义enter和exit方法, 而只需实现有一个 yield 语句的生成器, 生成想让enter方法返回的值。
yield之前的代码由 方法管着,之后的由 管着。
可以这样用: 。
enter之后获得conn,调用Connection类中的transaction方法,这个方法中只有一行代码,调用begin方法, 。然后exit的时候,commit、rollback。
Database类到此结束,继续看Connection类。
这个类才是负责真正的数据库连接,查询用的。
前几个方法与Database中的类似,跳过。
方法,查询数据库。
方法里面调用了 和 ,这两个类后面再看。
下面几个方法没啥好说的,跳过。
大神写的代码就是不一样,各种高级用法。
写了这么多字,好累。另外两个类有空再看。
领取专属 10元无门槛券
私享最新 技术干货