Flask+PostgreSQL中Linux下money类型千分位设为 的方法
问题
现有一个基于Flask与PostgreSQL的程序,需将部分数字数据转换为money类型。当前存在以下差异问题:
- Windows系统中,money类型数据的千分位分隔符为
(可通过浏览器控制台确认) - Linux系统运行时,千分位分隔符变为普通空格
要求不使用to_char函数的前提下,实现Linux系统中也用 作为千分位分隔符。
补充说明:Windows下数字显示格式为20,000,Linux下为2,000,000。
现有相关代码片段:
- 数据库查询语句:
COALESCE(t1.account_money, 0)::money AS account_money - HTML中Jinja2渲染代码:
<td class="th_main_sum_i">{{ application.account_money }}</td>
附Windows与Linux的locale设置截图、PostgreSQL在Linux下的locale设置截图。
解决方案
方法1:自定义PostgreSQL的LC_MONETARY locale
PostgreSQL的money类型格式化逻辑完全依赖系统的LC_MONETARY locale配置。通过创建自定义locale,将千分位分隔符指定为非断空格(Unicode U+00A0,对应HTML的 ),即可让数据库直接输出符合要求的格式。
操作步骤:
- 导出现有目标locale的配置文件(以
en_US.UTF-8为例):localedef --dump-locale en_US.UTF-8 > en_US.UTF-8.src - 编辑导出的
en_US.UTF-8.src文件,找到mon_thousands_sep字段,将其值修改为"\u00A0" - 生成自定义locale:
localedef -f UTF-8 -i en_US en_US.UTF-8-NBSP < en_US.UTF-8.src - 修改PostgreSQL配置文件(
postgresql.conf):lc_monetary = 'en_US.UTF-8-NBSP' - 重启PostgreSQL服务使配置生效。
方法2:在Jinja2渲染层替换分隔符
如果不想修改数据库配置,可直接在模板渲染阶段将money字符串中的普通空格替换为 。修改后的Jinja2代码如下:
<td class="th_main_sum_i">{{ application.account_money.replace(' ', ' ') }}</td>
该方法无需调整数据库,仅在前端处理,实现成本低且兼容性强。
内容的提问来源于stack exchange,提问作者dutik
相关产品推荐
相关产品推荐

