SQLAlchemy 混合属性日期时间到假期
Posted
技术标签:
【中文标题】SQLAlchemy 混合属性日期时间到假期【英文标题】:SQlAlchemy hybrid property datetime to holidays 【发布时间】:2021-01-24 07:11:49 【问题描述】:我有一个如下所示的 SQLAlchemy 模型。
class ElUsage(Base):
recid = Column(Integer(),primary_key=True)
date_of_usage = Column(DATE())
total_units = Column(Float(precision=5))
我试图通过将日期与 pandas 日历进行比较来创建混合属性 is_holiday
@hybrid_property
def is_holiday(self):
is_hday = 0
cal = calendar()
holidays = cal.holidays(start=dt.date(2015,1,1),
end=dt.date(2020,12,31))
if np.datetime64(self.usage_date) in holidays:
is_hday = 1
return is_hday
@is_holiday.expression
def is_holiday(cls):
is_hday = 0
cal = calendar()
holidays = cal.holidays(start=dt.date(2015,1,1),
end=dt.date(2020,12,31))
if np.datetime64(cls.usage_date) in holidays:
is_hday = 1
return is_hday
显式转换为 numpy datetime64 是一项挑战。创建混合属性以将日期标记为假日或非(0 或 1)值的任何简单方法?
TIA
【问题讨论】:
【参考方案1】:第一个属性 - python 部分 - 你做得对,考虑到this answer。
@hybrid_property
def is_holiday(self):
is_hday = 0
cal = calendar()
holidays = cal.holidays(start=dt.date(2015,1,1),
end=dt.date(2020,12,31))
if np.datetime64(self.usage_date) in holidays:
is_hday = 1
return is_hday
第二部分 - SQL 部分 - 更复杂,因为您需要编写返回等效属性的 SQLAlchemy 查询
@is_holiday.expression
def is_holiday(cls):
cal = calendar()
holidays = cal.holidays(start=dt.date(2015,1,1),
end=dt.date(2020,12,31))
return cls.usage_date.in_(holidays)
我无法对此进行测试,所以如果它不起作用,请告诉我。
【讨论】:
感谢您的解决方案。它按预期工作。以上是关于SQLAlchemy 混合属性日期时间到假期的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SqlAlchemy / Mysql 中存储时区感知日期时间值?
SQLAlchemy - 将日期时间设置为字符串并获取日期?