【发布时间】:2013-11-26 18:56:31
【问题描述】:
我正在使用 Python Camelot,它在后台使用 sqlalchemy 和 sqlite。我将小时数存储为整数以避免浮点错误。例如,1 小时在数据库中存储为 100,2.5 小时存储为 250,依此类推。当我显示小时数时,我希望它除以 100.0。代码如下:
class Task( Entity ):
__tablename__ = 'task'
id = Column( Integer, primary_key=True )
text = Column( String, nullable=False )
completed = Column( Boolean, default=False )
date_created = Column( Date, default=datetime.today )
date_completed = Column( Date )
notes = Column( String )
@property
def total_hours_estimated (self):
value = sum([ work.hours_estimated for work in self.work ])
value = value / 100.0
return value
@ColumnProperty
def total_hours_estimated_colprop (self):
return sql.select( [sql.func.sum(Work.hours_estimated)],
Work.task_id == self.id)
class Work( Entity ):
__tablename__ = 'work'
id = Column( Integer, primary_key=True )
date = Column( Date )
hours_estimated = Column( Integer, default=0 )
hours_actual = Column( Integer, default=0 )
task_id = Column( Integer, ForeignKey('task.id') )
task = relationship(Task, backref='work')
@property 方法计算所需的结果,但在 Camelot 表中查看时,它不允许您按该列排序。文档说你必须使用 ColumnProperty 方法,但我不知道在 ColumnProperty 方法中在哪里划分。有可能吗?
编辑:问题似乎是如果我添加一个浮点除法,sql.select 会返回 Decimal 对象,也许 Camelot 不喜欢这样。示例:
>>> session.query(sql.select( [sql.func.sum(Work.hours_estimated/100.0)])).all()
[(Decimal('5.5000000000'),)]
【问题讨论】:
标签: python sqlalchemy