美文网首页工具癖程序员
Python加peewee让数据库访问更简单

Python加peewee让数据库访问更简单

作者: DigiHacker | 来源:发表于2018-10-11 21:39 被阅读21次

经常有人贬低ORM(Object Relational Mapping),说性能不好,麻烦。这种人要么是互联网企业的大牛,要么是根本没维护过大型代码。做为接地气的程序 员,多少还是要接触到Hibernate, ActiveRecords这样各种ORM框架的。不然你就要面对成千上万行的SQL代码无从下手。

peewee是以简单为卖点的ORM, 我就喜欢这样的框架,类似的还有flask, sinatra, 文档能一个网页读完,用起来又很舒服,没有一堆坑。不然你自己写个项目,动不动上一堆框架,等学完了都忘了当初要干什么来着。当然你有上亿资金,能请的起好几个团队的话就另说了。

ORM当然要写类了,


BaseModel继承自peewee自带的Model类,用Meta去指定数据库属性,同时我们还可以在这个类里定义一些共有的方法。

它的子类就是具体对应的表。象CharField, DataTimeField都是定义列属性。

在这个例子里Account跟Article是一对多的关系,所以我们用了ForeignKeyField去做一个连接。同时要宣言某列为primary_key, 不然peewee会做关联查询时抛一些奇怪的错。

定义好Model后,我们就可以创建数据库和连接了,在这里我们用简单的sqlite.

Proxy是peewee一个特殊的类,可以用来维护数据库连接,在初始化后就可以创建表了。第二次连接时,表里的数据 并不会被清除,所以不用担心重复创建的问题。

3.png

这样我们在业务代码里就可以调用connect方法后去做创建和查询操作了。create, save方法都很直白,就不做介绍了。

user_content是一个我封装好的查询方法,这样就不会把peewee的方法调用暴露给业务代码,实现层次的区分。因为现在前端的代码以及很多第三方服务都喜欢json. 所以用python自带的json.dumps把查询结果转换一下。model_to_dict是来自peewee的一个辅助方法,帮助你把查询结果转为python的dict. backrefs是一个选项,表示返回关联表的数据。

而json_serial是一个转换datetime为iso格式的方法,用了它,就可以避免类中包含datetime时转换json出错。 同样你可以未来在这个方法里做更多类型的转换。 这也是小型框架的好处,有问题的话可以自己用优雅的方法解决,而不是在一堆调用里找bug等别人解决。

最后我们在页面就可以拿到转换好的数据了, 是不是很简单实用呢?

相关文章

网友评论

    本文标题:Python加peewee让数据库访问更简单

    本文链接:https://www.haomeiwen.com/subject/fjeiaftx.html