python - 在 sqlalchemy 中查找平均日期
问题描述
我有两张桌子。Foo 和酒吧。
class Foo(db.Model):
id = db.Column(db.Integer, primary_key=True)
bars = db.relationship('Bar', backref='foo', lazy='dynamic')
class Bar(db.Model):
id = db.Column(db.Integer, primary_key=True)
date = db.Column(db.DateTime, default=datetime.utcnow)
foo_id= db.Column(db.Integer, db.ForeignKey('foo.id'))
我怎样才能在 Foo 中拥有一个可以从所有条形图中找到平均日期的混合属性。我已经尝试了以下,它不会产生任何错误,但没有给出预期的结果
@hybrid_property
def baz(self):
return db.select([db.func.avg(Bar.date)]) \
.where(Bar.foo_id == self.id) \
.label('baz')
我究竟做错了什么?
解决方案
这是一个棘手的问题。
我不确定应用avg()
在一个DateTime
对象上效果很好。如果我是你,我会以秒为单位计算该字段的平均值。为此,您可以hybrid_property
使用一个expression
inBar
将date
字段转换为秒:
class Bar(db.Model):
id = db.Column(db.Integer, primary_key=True)
date = db.Column(db.DateTime)
foo_id= db.Column(db.Integer, db.ForeignKey('foo.id'))
@hybrid_property
def date_seconds(self):
return time.mktime(self.date.timetuple())
@date_seconds.expression
def date_seconds(cls):
return time.mktime(cls.date.timetuple())
然后使用它date_seconds
来计算秒的平均值,并将其转换回可读的时间格式。
推荐阅读
- c++ - Opencv GStreamer 管道在 Raspberry Pi 4 上不起作用
- google-apps-script - 为什么谷歌电子表格脚本无法排序?
- python-3.x - 如何将 IBM Cloudant 数据库连接到本地 python 代码?
- c# - excel互操作字符串数组到范围,不显示为公式
- r - 从与另一个数据帧匹配的非常大的数据帧中删除行的最快方法
- ruby-on-rails - (角度 8)在 $http Post 数据中发送文件数据会在 Rails API 日志中给出 {}
- java - Itext7定位异常
- c - 为什么 brk(void *end_data_segment) 的参数不向上舍入到下一页边界?
- jsf - 在 Java PrimeFaces Extension 中恢复动态表单数据
- laravel - Laravel RESTful 和多子域