在开发中,查询操作是使用最多的,而查询列表是其中之一,查询列表可分为分页查询和不分页查询(它们之间多了一次总记录数查询),还可以分为单表查询和多表关联查询,返回的结构体根据前端使用的表单框架不同而有所区别。

  我们先看看,对于列表分页查询,在接口中是如何处理的

 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, "查询失败")
View Code

相关文章: