Chr*_*lly 11 python mysql orm sqlalchemy floating-accuracy
我使用SQLAlchemy的ORM在MySQL中存储了一些数字.当我之后获取它们时,它们被截断,只保留6个有效数字,因此在我的浮点数上失去了很多精度.我想有一个简单的方法可以解决这个问题,但我找不到如何.例如,以下代码:
import sqlalchemy as sa
from sqlalchemy.pool import QueuePool
import sqlalchemy.ext.declarative as sad
Base = sad.declarative_base()
Session = sa.orm.scoped_session(sa.orm.sessionmaker())
class Test(Base):
__tablename__ = "test"
__table_args__ = {'mysql_engine':'InnoDB'}
no = sa.Column(sa.Integer, primary_key=True)
x = sa.Column(sa.Float)
a = 43210.123456789
b = 43210.0
print a, b, a - b
dbEngine = sa.create_engine("mysql://chore:BlockWork33!@localhost", poolclass=QueuePool, pool_size=20,
pool_timeout=180)
Session.configure(bind=dbEngine)
session = Session()
dbEngine.execute("CREATE DATABASE IF NOT EXISTS test")
dbEngine.execute("USE test")
Base.metadata.create_all(dbEngine)
try:
session.add_all([Test(x=a), Test(x=b)])
session.commit()
except:
session.rollback()
raise
[(a,), (b,)] = session.query(Test.x).all()
print a, b, a - b
Run Code Online (Sandbox Code Playgroud)
产生
43210.1234568 43210.0 0.123456788999
43210.1 43210.0 0.0999999999985
Run Code Online (Sandbox Code Playgroud)
我需要一个解决方案来生产它
43210.1234568 43210.0 0.123456788999
43210.1234568 43210.0 0.123456788999
Run Code Online (Sandbox Code Playgroud)
根据我们在评论中的讨论:sa.types.Float(precision=[precision here])而不是sa.Float允许您指定精度;但是,sa.Float(Precision=32)没有任何效果。请参阅文档以获取更多信息。
| 归档时间: |
|
| 查看次数: |
7041 次 |
| 最近记录: |