项目简介
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