您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2022/12/12 12:21:24发布63次查看
经常有人贬低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一个特殊的类,可以用来维护数据库连接,在初始化后就可以创建表了。第二次连接时,表里的数据 并不会被清除,所以不用担心重复创建的问题。
这样我们在业务代码里就可以调用connect方法后去做创建和查询操作了。create, save方法都很直白,就不做介绍了。
user_content是一个我封装好的查询方法,这样就不会把peewee的方法调用暴露给业务代码,实现层次的区分。因为现在前端的代码以及很多第三方服务都喜欢json. 所以用python自带的json.dumps把查询结果转换一下。model_to_dict是来自peewee的一个辅助方法,帮助你把查询结果转为python的dict. backrefs是一个选项,表示返回关联表的数据。
而json_serial是一个转换datetime为iso格式的方法,用了它,就可以避免类中包含datetime时转换json出错。 同样你可以未来在这个方法里做更多类型的转换。 这也是小型框架的好处,有问题的话可以自己用优雅的方法解决,而不是在一堆调用里找bug等别人解决。
最后我们在页面就可以拿到转换好的数据了, 是不是很简单实用呢?
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product