今天,一个app客户端同事需要我服务器端提供一组数据,这组数据要按类分好,把整个结构都展示给他,他直接使用就可以了。数据大概如下面这种:

  同事需要的结构大概就是类型1有多少,分别是什么;类型2有多少,分别是什么,,以此类推。本来我想一股脑全部给他,每个数据都有个字段device_type,你自己去解析分类一下,但客户端同事说,在客户端做这种事,浪费时间,客户响应会变慢,所以要我们服务器端来做。我们服务器端做,最好不要自己去解析,不然一样慢,最好一条sql语句,自动为我解析好。

  如果熟悉mysql,应该可以知道,可以用group_concat进行分组。

  先用sql语句查询一下,会有如下结果;

mysql> select device_type, group_concat(id) from otherequipment group by device_type;
+-------------+---------------------+
| device_type | group_concat(id)    |
+-------------+---------------------+
 ,,,,,,,, |
 ,               |
 ,                 |
+-------------+---------------------+
 rows in set (0.00 sec)

  按照类型划分设备,对比一下上面的数据,是不是一下子全出来了。

  但在sqlalchemy中如何使用呢?sqlalchemy有个func,里面包含各种sql函数。我们试用一下吧。

  sqlalchemy的model如下,

  

class OtherEquipment(Base):
    """
    其他公司普通设备
    """
    __tablename__ = 'otherequipment'

    id = Column('id', Integer, primary_key=True)
    device_type = Column('device_type', SmallInteger, index=True, default=1)

    name = Column('name', String(40), index=True)
    position = Column('position', String(40), nullable=True)

  那获取这些设备的对象就很好写咯,

es = db_session.query(OtherEquipment.device_type, func.group_concat(OtherEquipment.id)).group_by(OtherEquipment.device_type).all()
all_equipments = []
for l in es:
    device_type, ids = l
    ids = ids.split(',')
    equipments = [OtherEquipment.query.get(e_id) for e_id in ids]
    all_equipments.append((device_type, equipments))
all_equipments就是其所有设备的结构图,打印一下,结果如下:
[(, [外部设备1, 外部设备11, 外部设备9, 外部设备13, 外部设备6, 外部设备5, 外部设备4, 外部设备3, 外部设备2]), (, [外部设备10, 外部设备12]), (, [外部设备8, 外部设备7])]

  这样,客户端直接拿到接口的数据,就可以直接展示,不需要自己轮询,再去分析了。

 

sqlalchemy--group_concat的使用的更多相关文章

  1. mysql和SQLAlchemy

    mysql和SQLAlchemy 一.MySQL分组查询 1.1 MySQL对数据表进行分组查询(GROUP BY) 1.GROUP BY基本语法格式: GROUP BY关键字可以将查询结果按照某个字 ...

  2. SQLAlchemy完全入门

    最近想要学习SQLAlchemy, 发现网上的中文文档大多是机翻的, 读起来特别变扭, 因此对照着最新的英文文档梳理了一遍, 写下来记录一下 目前SQLAlchemy的版本为1.4.x, 风格处于1. ...

  3. sqlalchemy学习

    sqlalchemy官网API参考 原文作为一个Pythoner,不会SQLAlchemy都不好意思跟同行打招呼! #作者:笑虎 #链接:https://zhuanlan.zhihu.com/p/23 ...

  4. tornado+sqlalchemy+celery,数据库连接消耗在哪里

    随着公司业务的发展,网站的日活数也逐渐增多,以前只需要考虑将所需要的功能实现就行了,当日活越来越大的时候,就需要考虑对服务器的资源使用消耗情况有一个清楚的认知.     最近老是发现数据库的连接数如果 ...

  5. GROUP_CONCAT将里面拼接的字符串排序

    SELECT oam.id , GROUP_CONCAT(oacm.name) category FROM om_article_manage oam LEFT JOIN om_article_cat ...

  6. 冰冻三尺非一日之寒-mysql(orm/sqlalchemy)

    第十二章  mysql ORM介绍    2.sqlalchemy基本使用 ORM介绍: orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似pyt ...

  7. MySQL中的group_concat函数

    group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 以cat_id分组,把name字段的值打印在一行, ...

  8. Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  9. SQLAlchemy(一)

    说明 SQLAlchemy只是一个翻译的过程,我们通过类来操作数据库,他会将我们的对应数据转换成SQL语句. 运用ORM创建表 #!/usr/bin/env python #! -*- coding: ...

  10. sqlalchemy(二)高级用法

    sqlalchemy(二)高级用法 本文将介绍sqlalchemy的高级用法. 外键以及relationship 首先创建数据库,在这里一个user对应多个address,因此需要在address上增 ...

随机推荐

  1. 设计模式(一): abstract factory抽象工厂模式 -- 创建型模式

    1.定义 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类. 2.适用场景 1.一个系统要独立于它的产品创建.组合和表示. 2.一个系统要由多个产品系列中的一个来配置. 3.当你要 ...

  2. delphi 托盘程序 转

    Delphi的托盘编程   .现在很多程序都用这个,比如傲游,迅雷等,主要代码如下: uses Windows, Messages, SysUtils, Variants, Classes, Grap ...

  3. Java学习日记-11 集合(1)

    Collection接口集合中存储的只是对象的引用,不是对象本身. 1.ArrayList<E>类1.1ArrayList和Collection的关系 public interface L ...

  4. MyBatis(5):MyBatis集成Spring事务管理(上)

    单独使用MyBatis对事务进行管理 前面MyBatis的文章有写过相关内容,这里继续写一个最简单的Demo,算是复习一下之前MyBatis的内容吧,先是建表,建立一个简单的Student表: 1 2 ...

  5. Media层

    媒体层包含图形技术.音频技术和视频技术,这些技术相互结合就可为移动设备带来最好的多媒体体验,更重要的是,它们让创建外观音效俱佳的应用程序变得更加容易.您可以使用iOS的高级框架更快速地创建高级的图形和 ...

  6. c#中WebBrowser控件的使用方法

    首先先来简单介绍一下webbrowser控件,这个控件是可以实现在form窗体中添加网页内容的.如图,我在form中加入了百度api,(百度地图api调用博客里有讲) 使用这个控件其实很简单 (1)第 ...

  7. [转] Web性能压力测试工具之ApacheBench(ab)详解

    PS:网站性能压力测试是性能调优过程中必不可少的一环.只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题.Apache中有个自带的,名为ab的程序,可以对Apache或其它类型的服务器进行网 ...

  8. linux性能调优概述

    - 什么是性能调优?(what) - 为什么需要性能调优?(why) - 什么时候需要性能调优?(when) - 什么地方需要性能调优?(where) - 什么人来进行性能调优?(who) - 怎么样 ...

  9. ASP.NET-FineUI开发实践-1

    用.Net开发3年,主要接触资产管理,生产流程,质量追溯,.Net在这方面还是很靠谱的.2月低接触FineUI,那时版本是3.0+,第一眼让我想起了ExtJs,其实就是用.Net封装了ExtJs让AS ...

  10. DataGrid 使用模型列后实现点击列名称排序

    DataGrid 使用模型列后实现点击列名称排序 代码如下: <DataGridTemplateColumn Header="型 号" SortMemberPath=&quo ...