SQLAlchemy计算列

(新的SQLAlchemy用户警报)我有三个表:一个人,该人从特定日期开始的每小时费率以及每日时间报告。我正在寻找一种正确的方法,以使该天的时基成本不高于该天的人每小时费率。


是的,我可以在创建时计算该值并将其作为模型的一部分,但可以将其视为总结幕后更复杂数据的示例。如何计算Time.cost?它是hybrid_propery,column_property还是完全不同的东西?


class Person(Base):

    __tablename__ = 'person'

    personID = Column(Integer, primary_key=True)

    name = Column(String(30), unique=True)


class Payrate(Base):

    __tablename__ = 'payrate'

    payrateID = Column(Integer, primary_key=True)

    personID  = Column(Integer, ForeignKey('person.personID'))

    hourly    = Column(Integer)

    starting  = Column(Date)

    __tableargs__ =(UniqueConstraint('personID', 'starting',

                                     name='uc_peron_starting'))


class Time(Base):

    __tablename__ = 'entry'

    entryID  = Column(Integer, primary_key=True)

    personID = Column(Integer, ForeignKey('person.personID'))

    workedon = Column(Date)

    hours    = Column(Integer)


    person = relationship("Person")


    def __repr__(self):

        return "<{date} {hours}hrs ${0.cost:.02f}>".format(self, 

                      date=self.workedon.isoformat(), hours=to_hours(self.hours))


    @property

    def cost(self):

        '''Cost of entry

        '''

        ## This is where I am stuck in propery query creation

        return self.hours * query(Payrate).filter(

                             and_(Payrate.personID==personID,

                                  Payrate.starting<=workedon

                             ).order_by(

                               Payrate.starting.desc())


繁星淼淼
浏览 317回答 2
2回答

蝴蝶刀刀

很多时候,我能给出的最好建议就是做些不同的事情。这样的多表计算列就是数据库视图的用途。根据时间表中包含计算列的表(或其他任何想要的表)构建视图,根据该视图构建模型,然后进行设置。这也可能减轻数据库的压力。这也是为什么将设计限制为只能通过自动迁移完成的操作很危险的一个很好的例子。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python