码云推荐 | 基于 ActiveRecord 模式的 ORM 框架 Hare

hare是一个基于pymysql并运用 ActiveRecord 模式的 ORM 框架。

项目简介

hare是一个基于pymysql并运用ActiveRecord模式的ORM框架, 在虚拟环境下,通过:

pip install hare

即可安装。

当前,它只支持:

MySQL

动机

在Python下进行数据库操作, 大体有两种方法:

1、使用raw sql;

2、使用ORM;

Raw SQL

使用raw sql的好处是:

给予开发人员极大的自由,让开发人员知道具体要执行的sql,方便sql优化

坏处是麻烦:

写起来麻烦、影响开发速度;维护起来也麻烦

ORM

python中用的最广的ORM是SQLAlchemy和Peewee.

使用ORM的好处是:

写起来方便,维护方便

坏处是:

对开发人员透明、不利于sql优化;

主流的ORM学习成本高,对于一般的中小型项目而言,用不到那么到功能,如SQLAlchemy

此外, pythonORM框架的使用哲学是:

需要要手动的在类中配置字段和对应类型, 然后使用ORM去自动创建对应的table。

而开发人员的哲学是:

手动使用sql建表、然后再去创建对应的ORM。

那么, 比较下来,就产生了新的需求: 实现一个ORM,满足下列要求:

1、方便ORM和数据库表之间的映射、最好不用在ORM中声明字段;

2、支持raw sql;

3、不需要实现复杂的API(太复杂的,可以直接通过raw sql实现);

4、支持事务(声明式、命令式)

很容易想到, 使用Active Record的方式实现一个ORM,满足上述条件。

于是就实现了一个名为Hare的ORM.Hare的意思是野兔, 希望进行python的db操作时,像兔子一样快。

参考框架

在设计和实现Hare的过程中,参考了Flask框架和jFinal框架的设计。

1、jFinal

jFinal是一种轻量的java web框架;设计和实现Hare的过程中,借鉴了它的一些设计思想:

自动获取表结构

jFinal在启动的时候,根据ORM对应的表名,通过MySQL的INFORMATION_SCHEMA取获取表结构;

Hare也通过此方式来获取。

2、Flask

Flask是一种轻量的python web框架;设计和实现Hare的过程中,借鉴了它的一些设计思想:

将框架对象化

flask中,通过:

app = Flask(__name__)

的方式来建立一个应用对象, 并在该对象中存储相关路由、处理器等信息;

Hare中, 采用类似方式,通过:

haredb = Hare(host='localhost', user='root', password='*****', db='test', charset='utf8')

来创建一个数据源对象, 存放数据操作所需的一切信息。

装饰器

flask中,使用装饰器的方式,来定义路由处理:

@app.route('/home', methods=['GET']) def home(): pass

Hare也使用装饰器来定义定义数据模型类和表之间的映射关系,并存储, 如下:

@haredb.table('user') class User(Model): pass

把User类和user表对应起来.

同时,Hare中的事务也可以通过装饰器来实现:

@haredb.tx def func(...): ...

https://gitee.com/bingtel/hare

原文发布于微信公众号 - 码云Gitee(mayunOSC)

原文发表时间:2017-02-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏架构师之旅

Oracle的常见问题汇总(3) ——​数据库死锁原因及解决办法

数据库死锁原因及解决办法 所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时...

19850
来自专栏*坤的Blog

redis性能测试

1.1K20
来自专栏Elasticsearch实验室

Elasticsearch调优实践

本文基于ES 5.6.4,从性能和稳定性两方面,从linux参数调优、ES节点配置和ES使用方式三个角度入手,介绍ES调优的基本方案。当然,ES的调优绝不能一概...

6.2K160
来自专栏大数据文摘

手把手 | 20行Python代码教你批量将PDF转为Word

35250
来自专栏编程

我是如何利用CSRF Get DedeCms Shell的

说实话,有一两个月没有审计大厂了,然后随便看到群里有人问dede最新有没有漏洞,就下了一套最新的dede,结果我一看还真发现了。 ? 我们发现后台添加广告的地方...

22470
来自专栏xingoo, 一个梦想做发明家的程序员

AngularJS 技术总结

学习AngularJS,并且能在工作中使用到,算是很幸运了。因此本篇也会搜集各种资料,进行分享。 书籍分享 AngularJS权威指南 常用链接 Angula...

211100
来自专栏美团技术团队

MTDDL——美团点评分布式数据访问层中间件

背景 2016年Q3季度初,在美团外卖上单2.0项目上线后,商家和商品数量急速增长,预估商品库的容量和写峰值QPS会很快遇到巨大压力。随之而来也会影响线上服务的...

58350
来自专栏瓜大三哥

UVM(九)之sequence机制续2

UVM(九)之sequence机制续2 1. 用事件做sequence之间的同步 到目前为止,sequence机制就是一个sequence启动之后对应一个seq...

37180
来自专栏bboysoul

linux 终端下最简单的代理方式(proxychains)

我以前写过给linux终端设置代理 这个是用polipo这个工具把socks5代理转换成为http和https代理来实现终端下代理的,那么终端下有没有原生的使...

22020
来自专栏运维

ELK分析ngx_lua_waf软件防火墙日志

https://github.com/loveshell/ngx_lua_waf

29910

扫码关注云+社区

领取腾讯云代金券