首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python和SQL数据处理实战-父子关系表转为json

又要拿地区表来当例子,其实这张表很典型,不同的表结构设计反映着不同的数据关系,4个字段可以反映4层关系,如果用省市区这样结构去设计,那么需要设计6个字段,且计算省数量市数量时候还需要distinct或者group by去重

关于数据结构,就python而言用的较多的是列表和字典,实际生活中我们想把数据展现的更有逻辑一些,通过代码实现类似的功能,锻炼逻辑思考能力和编程语言的使用能力,通过不同的数据结构组合去展现数据,是一件很有意思的事情.

这张表通过id关联出父子关系,根据level字段判定级别,那么如何将这张表显示为省-市-区县的结构呢? 还是用到了group_concat函数,以及2次left join进行表的自连接,只是链接条件是id和parent

一.SQL脚本处理

上面的结果集已经可以把省市区划分出来,如果我们想展示成下面的格式(最终json格式以双引号)

mysql5.7版本虽然增加了对json数据的处理函数,写起来还是有点困难,这时候尝试用python去处理.

二.python处理

选择用python处理的话,是有两种逻辑的,一个是执行上面的复杂sql,一个是直接读取表,所有操作都是python写

2.1第一种处理方式:

第一个是去执行上面的复杂SQL脚本赋值给一个变量,通过对记录集进行遍历,因为上图需要处理成一个列表的数据结构,列表里面是每个省的字典,每个省下面citys这个key又对应一个市列表,市列表里面又是每个市-区的字典.....

O(∩_∩)O哈哈~还是很绕的

总体思路就是 先获得省id和省名称去重之后的数据,可以用list和set组合形式得到省的列表province_items,province_items列表里面是每个省的字典province_item = {'province_id':省id,'province':省名称,'citys':[]},key值citys对应是一个空列表.

对结果集rows和进行遍历时候 将每一条记录row变量的第一个字段的值(id的值)是否和province_item字典的['province_id']值是否相等 决定 province_item['citys']这个空列表是否append({'city_name':city_item['city_name'],'areas':city_item['areas'])

json数据

2.2第二种处理方式:

第二种处理方式是直接读取源表数据,不执行复杂sql,所有处理的数据结构逻辑用python代码完成

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180109G0FNCC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券