在开发中,查询操作是使用最多的,而查询列表是其中之一,查询列表可分为分页查询和不分页查询(它们之间多了一次总记录数查询),还可以分为单表查询和多表关联查询,返回的结构体根据前端使用的表单框架不同而有所区别。
我们先看看,对于列表分页查询,在接口中是如何处理的
1 @get('/api/product/') 2 def callback(): 3 """ 4 获取列表数据 5 """ 6 # 设置查询条件 7 wheres = '' 8 # 产品分类id 9 product_class_id = convert_helper.to_int0(web_helper.get_query('product_class_id', '产品分类id', is_check_null=False)) 10 if product_class_id > 0: 11 wheres = 'where product_class_id=' + str(product_class_id) 12 # 页面索引 13 page_number = convert_helper.to_int1(web_helper.get_query('page', '', is_check_null=False)) 14 # 页面显示记录数量 15 page_size = convert_helper.to_int0(web_helper.get_query('rows', '', is_check_null=False)) 16 # 排序字段 17 sidx = web_helper.get_query('sidx', '', is_check_null=False) 18 # 顺序还是倒序排序 19 sord = web_helper.get_query('sord', '', is_check_null=False) 20 # 初始化排序字段 21 order_by = 'id desc' 22 ### 设置排序 ### 23 if sidx: 24 order_by = sidx + ' ' + sord 25 # 类型 26 type = web_helper.get_query('type', '类型', is_check_null=False) 27 # 判断是否是前台提交获取数据 28 if type != 'backstage': 29 # 判断是否已经存在查询条件了,是的话在原查询条件后面拼接 30 if wheres: 31 wheres = wheres + ' and is_enable=1' 32 else: 33 wheres = 'where is_enable=1' 34 35 ############################################################# 36 # 初始化输出格式(前端使用jqgrid列表,需要指定输出格式) 37 data = { 38 'records': 0, 39 'total': 0, 40 'page': 1, 41 'rows': [], 42 } 43 ############################################################# 44 # 执行sql,获取指定条件的记录总数量 45 sql = 'select count(1) as records from product %(wheres)s' % {'wheres': wheres} 46 result = db_helper.read(sql) 47 # 如果查询失败或不存在指定条件记录,则直接返回初始值 48 if not result or result[0]['records'] == 0: 49 return data 50 # 保存总记录数量 51 data['records'] = result[0].get('records', 0) 52 53 ############################################################# 54 ### 设置分页索引与页面大小 ### 55 # 设置分页大小 56 if page_size is None or page_size <= 0: 57 page_size = 10 58 # 计算总页数 59 if data['records'] % page_size == 0: 60 page_total = data['records'] // page_size 61 else: 62 page_total = data['records'] // page_size + 1 63 # 记录总页面数量 64 data['total'] = page_total 65 66 # 判断提交的页码是否超出范围 67 if page_number < 1 or page_number > page_total: 68 page_number = page_total 69 # 记录当前页面索引值 70 data['page'] = page_number 71 72 # 计算当前页面要显示的记录起始位置 73 record_number = (page_number - 1) * page_size 74 # 设置查询分页条件 75 paging = ' limit ' + str(page_size) + ' offset ' + str(record_number) 76 77 ############################################################# 78 79 # 组合sql查询语句 80 sql = "select * from product %(wheres)s order by %(orderby)s %(paging)s" % \ 81 {'wheres': wheres, 'orderby': order_by, 'paging': paging} 82 # 读取记录 83 result = db_helper.read(sql) 84 if result: 85 # 存储记录 86 data['rows'] = result 87 88 if data: 89 # 直接输出json 90 return web_helper.return_raise(json.dumps(data, cls=json_helper.CJsonEncoder)) 91 else: 92 return web_helper.return_msg(-1, "查询失败")