SQLAlchemy 在更新 Postgres 条目时更改浮点数的精度
SQLAlchemy changes precision of floating-point number when updating a Postgres entry
我使用带有对象关系映射器的 SQLAlchemy 来访问 Postgres 数据库。一切正常,除了 SQLAlchemy 在我升级数据库条目时更改了一些(但不是全部)浮点数的精度。
假设我的数据库有一个 table My_table
看起来像这样:
id | my_float
----------------
1 | [NULL]
2 | 1.11
3 | 1.12
我获取 id=1 的条目并更新它:
from dbconnection import dbsession
from models import My_table
my_instance = dbsession.query(My_table).filter_by(id=1).first()
my_instance.my_float = 0.15
dbsession.commit()
我的 Postgres 数据库中的结果如下所示:
select * from my_table where id=1;
id | my_float
----------------
1 | 0.15000001
有没有办法让 SQLAlchemy 将准确的数字写入 Postgres?
编辑:我应该补充一点,列 my_float
的类型是 FLOAT(2)
。
没有。它与 SQLAlchemy 没有特别关系,但计算机以二进制方式运行。绝大多数十进制(基数 10)表示形式的小数点值无法以二进制表示形式(基数 2)准确表示。所有浮点值基本上都是估计值。但是,您可以指定所需的小数位数。但是,我不知道如何在 SQLAlchemy 中执行此操作。
我使用带有对象关系映射器的 SQLAlchemy 来访问 Postgres 数据库。一切正常,除了 SQLAlchemy 在我升级数据库条目时更改了一些(但不是全部)浮点数的精度。
假设我的数据库有一个 table My_table
看起来像这样:
id | my_float
----------------
1 | [NULL]
2 | 1.11
3 | 1.12
我获取 id=1 的条目并更新它:
from dbconnection import dbsession
from models import My_table
my_instance = dbsession.query(My_table).filter_by(id=1).first()
my_instance.my_float = 0.15
dbsession.commit()
我的 Postgres 数据库中的结果如下所示:
select * from my_table where id=1;
id | my_float
----------------
1 | 0.15000001
有没有办法让 SQLAlchemy 将准确的数字写入 Postgres?
编辑:我应该补充一点,列 my_float
的类型是 FLOAT(2)
。
没有。它与 SQLAlchemy 没有特别关系,但计算机以二进制方式运行。绝大多数十进制(基数 10)表示形式的小数点值无法以二进制表示形式(基数 2)准确表示。所有浮点值基本上都是估计值。但是,您可以指定所需的小数位数。但是,我不知道如何在 SQLAlchemy 中执行此操作。