弄完底层数据库操作模块后,接下来要做的是ORM的正式设计.在开始之前,我们需要思考一下怎么来设计一个ORM呢?这个类它能帮助我们处理什么样的问题?需要有哪些功能模块?怎么做到针对不同的数据库与表单进行操作? 在前面我们知道,ORM它简单的理解就是将我们写的一些参数值转变为对应的sql语句,来对数据表进行增删改查的操作.它可以帮助我们整合重复的代码,让我们对数据库操作变的更加简单.也就是说,只需要将参数存储到对应的字典.列表或元组中,并将它们做为参数提交给ORM,ORM就会自动分析并处理,然后生成…
在上一章中,我们已经创建好ORM的基类了,接下来要做的就是将基类的常用方法一一实现. 首先我们来看看之前项目中,最常见的获取指定主键的记录实体 @get('/api/product/<id:int>/') def callback(id): """ 获取指定id的产品记录实体 """ sql = """select * from product where id = %s"""…
在数据库操作时,新增记录也是必不可少的,接下来我们应用字典的特性来组合sql语句 先上产品新增接口代码 @post('/api/product/') def callback(): """ 新增记录 """ name = web_helper.get_form('name', '产品名称') code = web_helper.get_form('code', '产品编码') product_class_id = convert_helper.t…
在开始编写ORM模块之前,我们需要先对db_helper进行重构,因为ORM最终生成的sql是需要转给db_helper来执行的,所以拥有一个功能完善.健壮的数据库操作类是非常必要的. 这是项目原db_helper.py代码 #!/usr/bin/env python # coding=utf-8 import psycopg2 from common import log_helper from config import const # 初始化数据库参数 db_name = const.DB…
接下来我们要封装的是修改记录模块. 先上产品信息编辑接口代码 @put('/api/product/<id:int>/') def callback(id): """ 修改记录 """ name = web_helper.get_form('name', '产品名称') code = web_helper.get_form('code', '产品编码') product_class_id = convert_helper.to_int…
几个复杂的ORM方式都已介绍完了,剩下一些常用的删除.获取记录数量.统计合计数.获取最大值.获取最小值等方法我就不一一详细介绍了,直接给出代码大家自行查看. #!/usr/bin/env python # coding=utf-8 from common import db_helper class LogicBase(): """逻辑层基础类""" def __init__(self, db, is_output_sql, table_name…
写到这里,基本的ORM功能就完成了,不知大家有没有发现,这个ORM每个方法都是在with中执行的,也就是说每个方法都是一个完整的事务,当它执行完成以后也会将事务提交,那么如果我们想要进行一个复杂的事务时,它并不能做到,所以我们还需要对它进行改造,让它支持sql事务. 那么应该怎么实现呢?我们都知道要支持事务,就必须让不同的sql语句在同一个事务中执行,也就是说,我们需要在一个with中执行所有的sql语句,失败则回滚,成功再提交事务. 由于我们的逻辑层各个类都是继承ORM基类来实现的,而事务的开…
在开发中,查询操作是使用最多的,而查询列表是其中之一,查询列表可分为分页查询和不分页查询(它们之间多了一次总记录数查询),还可以分为单表查询和多表关联查询,返回的结构体根据前端使用的表单框架不同而有所区别. 我们先看看,对于列表分页查询,在接口中是如何处理的 @get('/api/product/') def callback(): """ 获取列表数据 """ # 设置查询条件 wheres = '' # 产品分类id product_clas…
我的第一个python web开发框架系列博文从17年6.7月份开始写(存了近十章稿留到9月份才开始发布),到今天结束,一年多时间,想想真不容易啊. 整个过程断断续续,中间有段时间由于工作繁忙停了好长时间,到今年6月份才稍微能挤出些时间来,想想自己年初定下的目标,咬咬牙重新开动,几个月坚持下来,比自己预计目标提前了3个多月时间完成了. 整个系列引用几个虚拟角色聊天的方式来展开说明,是因为很多开发常识,如果在代码中间冒然插入会感觉很突然,而使用聊天问问题的方式来展开说明,可能会更容易理解.当然后面…
接下来正式进入网站的功能开发.要完成后台管理系统登录功能,通过查看登录页面,我们可以了解到,我们需要编写验证码图片获取接口和登录处理接口,然后在登录页面的HTML上编写AJAX. 在进行接口开发之前,还有一个重要的事情要处理,那就是对站点进行初始化,如果不进行初始化,那么独立文件编写的接口将会找不到,要将异常错误写入日志文件也会找不到路径,下面先上代码. 打开main.py文件,改为下面代码(大家可以比较一下和之前代码有什么不同) #!/usr/bin/evn python # coding=u…