不同的十进制精度存储在PostgreSQL中,Sqlalchemy?

问题描述 投票:0回答:1

我正在尝试在十进制数的右侧获得最大4位数字的精度。以下是一个模型-使用flask-sqlalchemy和Postgres-组成:

Job Item(与许多关联表称为ItemJob)>>

Bill ItemJob(一对多)

# Item Model

# Job Model

class ItemJob(db.Model):
    __tablename__ = 'itemjob'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    bill_id = db.Column(db.Integer, ForeignKey('bill.id'))
    item_id = db.Column(db.Integer, ForeignKey('item.id'), primary_key=True)
    job_id = db.Column(db.Integer, ForeignKey('job.id'), primary_key=True)
    item = db.relationship(Item, backref='job_associations')
    job = db.relationship(Job, backref='item_associations')
    qty = db.Column(db.NUMERIC)
    unit_price = db.Column(db.NUMERIC)
    total_price = db.Column(db.NUMERIC)

    def __init__(self, item=None, job=None, qty=None, unit_price=None):
        self.item = item
        self.job = job
        self.qty = qty
        self.unit_price = unit_price
        self.total_price = float(qty) * float(unit_price)


class Bill(db.Model):
    __tablename__ = 'bill'

    id = db.Column(db.Integer, primary_key=True)
    itemjob = db.relationship('ItemJob', backref='bill', lazy='dynamic')
    bill_total_price = db.Column(db.NUMERIC)

    def update_bill(self):
        list1 = [i.total_price for i in self.itemjob]
        self.bill_total_price = sum(map(float, list1))

结果我明白了:

# some code of creating and adding instance 

>>> itemjob1=ItemJob(job=job1,item=item1,qty=3,unit_price=35.350)
>>> itemjob2=ItemJob(job=job1,item=item2,qty=1.0,unit_price=50.35)
>>> itemjob3=ItemJob(job=job1,item=item3,qty=4.0,unit_price=0.001)

# some code of adding and appending instance

>>> bill.update_bill()
>>> db.session.commit()
>>> for p in (bill.itemjob):print(p.item,p.qty,p.unit_price,p.total_price)
... 
<Item 1> 3 35.35 106.05000000000001
<Item 2> 1.0 50.35 50.35
<Item 3> 4.0 0.001 0.004
>>> bill.bill_total_price
Decimal('156.404')

如何在右侧将精度设置为最大4位,并避免在上述代码中像total_price那样存储<Item 1>

我正在尝试在十进制数的右侧获得最大4位数字的精度。以下是一个使用flask-sqlalchemy和Postgres的模型,其组成为:作业项(许多与关联...

python-3.x postgresql decimal flask-sqlalchemy
1个回答
0
投票

很好,您要将数字/小数转换为浮点数:self.bill_total_price = sum(map(float, list1))

© www.soinside.com 2019 - 2024. All rights reserved.