1. 面对的问题
编写可以灵活&高效访问数据库的程序,以python为例。
性能要好:无fd,内存泄漏;
灵活变更:数据库表变更,程序需要变更的地方明确,且改动尽量简单;
备注:互联网产品使用mysql,一般分为线上和线下数据库,需要关注的点也不尽相同,本次以线下离线数据库为例。
2. 现在的实现方式:python db-api


说明
cnt:mysql每次查询的context,每次连接并关闭,无连接池管理。
sql:字符串,自己拼装的sql语句,修改容易出错。
obj_data:sql查询获得的结果集,通过偏移index访问。-
缺点
- 查询数据库每次重新建立连接不合理。
- 查询语句手动维护,修改容易出错,需要同时看mysql表的schema来修改。
- 查询结果集根据偏移量来访问,不易于变更,如:列的顺序变化。
3. 一个优化解决方案
-
ORM(Object Relational Mapping)
数据流从左侧迁移到右侧 sqlalchemy
使用说明
豆瓣后端使用的orm工具
pip install sqlalchemy
Notice that the Core and raw SQL achieved comparable insertion speed while the ORM is much slower than the other two.
使用sqlalchemy建立数据库和表的例子

-
说明
- session支持复用
使用sqlalchemy查询表的例子

3. 另一个解决方案
- 也有很多时候我们希望开放&共享mysql中的数据
这就需要有支持快速搭建restful web接口和字段说明的服务
- beego:一个使用 Go 的思维来帮助您构建并开发 Go 应用程序的开源框架
- 视频教程: beego 一分钟创建API
- 安装
jumbo install go
go get github.com/astaxie/beego
生成方法2中的数据表restful web服务
线上例子 : employee,department

数据库表 + beego可以快速提供json形式的接口
