近期有中文拼单排序需要,查询资料,mysql数据库有convert函数支持

 select cname from channel order by convert(cname using gbk);
# cname字段使用utf8,默认的话,汉字转换为uft8码,然后再排序,顺序肯定有问题。使用convert将汉字转为gbk,就符合拼音排序
# https://datatables.net/plug-ins/sorting/
datatables的自定义排序,只作用于客户端页面排序,后台排序不适用。 我的程序涉及接口、datatable页面,需要变更后台程序。使用pypinyin模块进行中英文混排,因为使用了sqlalchemy,在order_by的时候,必须用cast函数将字段进行转换。
比如 字符数字变更为数字等,中文字符utf8转为中文拼音 。
sqlalchemy 没有定义convert函数,仅支持cast函数,我开始使用 cast(T.name, Custom)自定义列类型,失败,数据库层面排序实现困难。
改变思路,在返回结果,进行排序处理。 # 返回datatable数据
data = [{
'uuid': q.uuid,
'name': q.name,
'cname': q.cname,
'tname': q.tname,
'category': q.category,
'sort_id': q.sort_id,
'product': q.product,
'status': q.status,
'create_time': q.create_time,
'update_time': q.update_time
} for q in query.items] # 排序, 支持中文排序
reverse = False if order == 'asc' else True if order_name in ['product']:
data = sorted(data, key=lambda k: len(k[order_name].split(',')) if k[order_name] else '', reverse=reverse)
elif order_name in ['sort_id']:
data = sorted(data, key=lambda k: (len(k[order_name]), k[order_name]) if k[order_name] else '', reverse=reverse)
elif order_name in ['cname', 'tname', 'category']:
data = sorted(data, key=lambda k: lazy_pinyin(k[order_name]) if k[order_name] else '', reverse=reverse)
else:
data = sorted(data, key=lambda k: k[order_name], reverse=reverse) 其中有个小插曲,自然排序,一条语句搞定,神来之笔是生成位数与数据的元组,先比较位数,同位数再比较内容。
data = ['10', 'a2', '45', 'b32', '9', '0']
sorted(data, key=lambda x: (len(x), x)) ['0', '9', '10', '45', 'a2', 'b32']

sqlalchemy & python & datatables & javascript 中文拼音排序的更多相关文章

  1. JavaScript中文拼音排序函数

    要对很多设备根据名称排序,找了找没有找到特别适合的,然后就自己写了一个根据中文拼音首字母排序的方法. github: https://github.com/haboll/sort.git

  2. Android实现中文汉字笔划(笔画)、中文拼音排序、英文排序

    发布时间:2018-11-16   技术:Android   概述 最近要做一个类似微信的,在登录界面选择国家地区的功能,微信有中文汉字笔画排序以及中文拼音排序等几种方式,如下所示: 简体中文 拼音排 ...

  3. C++ 中文拼音排序方法。

    参考文档:http://zisxks.com/2013/10/25/sort-Chinese-characters-in-cpp/ 采用locate.注意事项:排序的名字,如果出现某一个人,出现在顶上 ...

  4. MySQL实现中文拼音排序

    MySQL下新建一个表,默认采用utf8字符集,中文不能直接按照拼音进行排序. 例如以下语句: SELECT * FROM `tb_fixedassets` order by C_FANAME 得到的 ...

  5. javascript 汉字拼音排序

    定义和用法 用本地特定的顺序来比较两个字符串. 语法 stringObject.localeCompare(target) 参数 描述 target 要以本地特定的顺序与 stringObject 进 ...

  6. MySQL按中文拼音排序

    好多时候,我们希望查询出来的记录能够按照汉语拼音即英文的26个字母排序,但是utf字符集是外国人弄的,不是按照汉语拼音的顺序排列的,因此,我们需要将要排序的字段把编码设定为GBK或者BG2312再进行 ...

  7. sql按照中文拼音排序

    select * from table order by convert(columnName using gbk) asc 注意:会导致全表扫描 建立冗余字段,插入数据时字段为convert(col ...

  8. Java中中文拼音的排序问题

    最近做一个手机数据同步的应用开发,需要提供地址簿信息按照姓名的拼音次序进行排序.但仔细考察Java提供的Collator之后,发现其中文拼音排序存在严重的问题.Java提供Collator来支持不同语 ...

  9. 使mysql按中文字段排序

    http://ourmysql.com/archives/391   测试后我发现,gbk不仅对字符内容是按拼音排序的,对数字也是一样,使用时需注意!     另外一篇文章: MySQL按中文拼音排序

随机推荐

  1. SQL Server2012如何更改服务器的名称

    Problem: sql server 2012 安装完毕后,连接数据库只能使用 机器名\数据库实例 的方式,想用 localhost 或 . 作为服务器名称不可以 Solution: 参考:http ...

  2. JS window,onload 与 $().read()

    JS:window.onload的使用介绍 .在body标签里面 .在JS语句调用 .同时调用多个函数 .JS调用多个函数 .自定义的函数多次调用 jquery $(document).ready() ...

  3. ESP8266使用详解

    [From] http://www.cnblogs.com/yangfengwu/p/5205570.html 用的这款 各引脚功能:来至厂家提供的资料 GPIO0 默认是工作模式(不接线).如果接了 ...

  4. JUnit学习之hamcrest、testSuite介绍及测试原则

    [转自] http://huihai.iteye.com/blog/1994270 上一节说了junit的一些基本概念,主要使用assert做一些基本的判断.但很多时候使用assert做判断,并不方便 ...

  5. Oracle之q操作符

    Oracle本身默认的是单引号,但是在大家写存储过程或者写SQL语句时,有时候需要拼SQL或者是SQL的值里需要传入含单引号的值,此时就需要使用两个单引号''''来进行转义,其实oracle本身提供了 ...

  6. Django settings配置文件

    由来:为什么我在用django配置的时候导入的不是我项目名下的那个settings 但是我配置了之后依然能够起作用,这是为什么? from django.conf import settings # ...

  7. 地牢逃脱----DFS搜索最优解

    https://www.nowcoder.com/practice/0385945b7d834a99bc0010e67f892e38?tpId=85&tqId=29831&tPage= ...

  8. scrapy框架之(CrawlSpider)

    一.CrawlSpider简介 如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调pa ...

  9. Python学习 day04

    一.list list可以存放各种类型的数据,与java中list类差不多,比如li = ['keith', 1, True, [1, 2, 3], {name: 'tangtang', age: 1 ...

  10. 超级详细全截图化VMware 安装ubantu

    一,下载镜像 由于ubantu时国外源所以下载十分的缓慢 这里我用清华源下载:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/18.10/ub ...