使用HybridProperty合并和格式化日期和时间列

jpm*_*rin 2 python mysql sqlalchemy

我有一个具有类型为Date和的两列的模型Time。我希望我的查询将这些列一起返回并格式化。我尝试使用hybrid_property这样的:

@hybrid_property
def mydate_and_mytime(self):
    return self.mydate.strftime("%Y-%m-%d") + " + " self.mytime.strftime("%H:%M")
Run Code Online (Sandbox Code Playgroud)

但是,属性内的类型,self.mydate并且self.mytimeInstrumentedAttribute不具有的strftime方法,并且它会产生错误。

如何使以下查询有效?

session.query(MyModel.mydate, MyModel.mytime, MyModel.mydate_and_mytime)
Run Code Online (Sandbox Code Playgroud)

dav*_*ism 5

除了简单的表达式外,Hybrid属性还需要一个getter和一个expression部分。利用内置函数组合日期和时间,然后进行格式化。

from datetime import datetime
from sqlalchemy.ext.hybrid import hybrid_property


@hybrid_property
def mydate_and_mytime(self):
    combine = datetime.combine(self.mydate, self.mytime)
    return combine.strftime('%Y-%m-%d %H:%M')

@mydate_and_mytime.expression
def mydate_and_mytime(cls):
    # return a sqlalchemy expression based on the columns
    # uses MySQL timestamp and date_format functions
    combine = db.func.timestamp(cls.mydate, cls.mytime)
    return db.func.date_format(combine, '%Y-%m-%d %H:%i')
Run Code Online (Sandbox Code Playgroud)

我认为,应将格式留给属性之外的某个地方,以便比较实际的日期时间,但这就是您的要求。