SQLAlchemy 如何让记录按照中文/汉字拼音首字母排序

表里有一堆中文数据,要怎么让他们按英文首字母排序。

网上的说法是先转换成英文,在排序,具体要怎么做呢

记得是要在 order_by() 方法里调用 CONVERT 函数,我有点忘了,具体你可以搜一下,我周末有时间再确认一下。

用 MySQL 试了下,大概是这样:

>>> from sqlalchemy.sql import func, literal_column
>>> Author.query.order_by(func.CONVERT(literal_column('name using gbk'))).all()

func.CONVERT 调用 CONVERT 函数,然后用 literal_column 传一个自定义的 SQL 语句来转换字段编码。

如果要降序排列的话,对 func.CONVERT 调用附加 .desc() 方法:

>>> Author.query.order_by(func.CONVERT(literal_column('name using gbk')).desc()).all()

可以考虑创建一个单独的字段来存储转换编码或转换成拼音后的数据,对这个字段建立索引。

顺便附上创建测试数据的代码:

from faker import Faker

fake = Faker('zh_CN')

for i in range(100):
    user = User(name=fake.name())
    db.session.add(user)

db.session.commit()
1 Like

我去试试,谢谢大佬

1 Like

像这种需求我觉得多新建一个字段来存储拼音或英文来排序是比较好的。可以利用pypinyin这个库自动转换成拼音。

1 Like