kro*_*onz 7 django postgresql precision
我正在通过Django将数据保存到PostgreSQL后端.我的模型中的许多字段都是DecimalFields设置为任意高的max_digits和decimal_places,对应于数据库后端中的数字列.每列中的数据具有先验未知的精度(或小数位数),并且给定列中的每个数据不需要具有相同的精度.
例如,模型的参数可能如下所示:
{'dist': Decimal("94.3"), 'dist_e': Decimal("1.2")}
{'dist': Decimal("117"), 'dist_e': Decimal("4")}
Run Code Online (Sandbox Code Playgroud)
其中键是数据库列名.
在输出时,我需要以读取它们的精度保留和重新显示这些数据.换句话说,在查询数据库之后,显示的数据看起来应该与读入的数据完全相同,没有额外的数据.或者在小数中缺少尾随0.但是,当在django shell或admin界面中查询时,所有DecimalField数据都会返回许多尾随0.
我已经看到类似的问题回答金钱值,其中精度(2位小数)是已知的,并且对于给定列中的所有数据都是相同的.但是,当精度不相同且事先不知道时,如何最好地保留Django中的Decimal值和PostgreSQL中的数值所表示的精确精度?
编辑:
可能是另一个有用的信息:当在Django dbshell中查看保存数据的表时,也会出现许多尾随0.在保存到PostgreSQL后端时,python Decimal值显然转换为models.py文件中指定的最大精度值.
如果您需要向前和向后完美奇偶校验,则需要使用 CharField。任何基于数字的数据库字段都会以某种方式与您的数据进行交互。现在,我知道您提到无法知道数据点的数字长度,而 CharField 需要一定的长度。您可以将其设置为任意高(1000、2000 等),或者我想您可以使用 TextField。
然而,无论采用哪种方法,在大多数情况下您都会浪费大量数据库资源。我建议修改您的方法,使末尾的额外零无关紧要(出于显示目的,您始终可以将它们切掉),或者使精度不再是任意的。