为了账号安全,请及时绑定邮箱和手机立即绑定

SQLAlchemy计算列

SQLAlchemy计算列

繁星淼淼 2021-04-02 22:14:30
(新的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())
查看完整描述

2 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

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


查看完整回答
反对 回复 2021-04-06
  • 2 回答
  • 0 关注
  • 316 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信