dar*_*aru 7 python django postgresql locale
显然PostgreSQL 8.4和Ubuntu 10.04无法处理为瑞典字母排序W和V的更新方式.也就是说,它仍然将它们命名为相同的字母(瑞典订购的旧定义):
它应该是(瑞典订购的新定义):
我需要为我正在构建的Python/Django网站正确订购.我已经尝试了各种方法来使用*values_list*来命令从Django QuerySet创建的元组列表.但由于它是瑞典语,ä,ä和ö字母需要正确订购.现在我有一种或另一种方式都不是两种方式..
list_of_tuples = [(u'Wa', 1), (u'Vb',2), (u'Wc',3), (u'Vd',4), (u'Öa',5), (u'äa',6), (u'Åa',7)]
print '########## Ordering One ##############'
ordered_list_one = sorted(list_of_tuples, key=lambda t: tuple(t[0].lower()))
for item in ordered_list_one:
print item[0]
print '########## Ordering Two ##############'
locale.setlocale(locale.LC_ALL, "sv_SE.utf8")
list_of_names = [u'Wa', u'Vb', u'Wc', u'Vd', u'Öa', u'äa', u'Åa']
ordered_list_two = sorted(list_of_names, cmp=locale.strcoll)
for item in ordered_list_two:
print item
Run Code Online (Sandbox Code Playgroud)
这些例子给出了:
########## Ordering One ##############
Vb
Vd
Wa
Wc
äa
Åa
Öa
########## Ordering Two ##############
Wa
Vb
Wc
Vd
Åa
äa
Öa
Run Code Online (Sandbox Code Playgroud)
现在,我想要的是这些的组合,以便V/W和å,ä,ö的排序是正确的.更确切地说.我希望Ordering One尊重语言环境.然后在每个元组中使用第二个项(对象id),我可以在Django中获取正确的对象.
我开始怀疑这是可能的吗?是否可以将PostgreSQL升级到更好的版本,更好地处理整理,然后在Django中使用原始SQL?
当LC_ALL=sv_SE.UTF-8 sort你在Ubuntu-10.04上运行你的例子时,它会在Vb之前出现Wa("旧方式"),所以Ubuntu似乎不同意"新方式".由于PostgreSQL依赖于操作系统,因此它的行为与给定相同lc_collate的操作系统的行为相同.
实际上有在与此相关的特定类型的问题debian的glibc的补丁:
http://sourceware.org/bugzilla/show_bug.cgi?id=9724
但遭到反对和不能接受的.如果你只需要你管理一个系统上的这种行为,你仍然可以申请补丁到/ usr/share/i18n中/区域设置/ sv_SE的变化,并通过运行重建se_SV区域locale-gen sv_SE.UTF-8.或者更好的是,创建自己的替代语言环境,以避免弄乱原语.
| 归档时间: |
|
| 查看次数: |
751 次 |
| 最近记录: |