python - 使用 HybridProperty 组合日期和时间列并设置其格式

标签 python mysql sqlalchemy

我有一个模型,其中有两列,类型为DateTime。我希望我的查询将这些列一起返回并格式化。我尝试使用像这样的hybrid_property:

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

但是,在属性内部,self.mydateself.mytime 的类型是 InstrumentedAttribute,它没有 strftime 方法,它会引发错误。

如何使以下查询起作用?

session.query(MyModel.mydate, MyModel.mytime, MyModel.mydate_and_mytime)

最佳答案

除了简单表达式之外,混合属性需要一个 getter 和一个表达式部分。利用内置函数组合日期和时间,然后设置格式。

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')

在我看来,格式应该保留在属性之外,以便比较实际的日期时间,但这是你的决定。

关于python - 使用 HybridProperty 组合日期和时间列并设置其格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25253535/

相关文章:

python - python 3中类 'bytes'的不同表示

当我们不关心输出时,Python 内置习惯用法将函数应用于可迭代对象的每个元素

mysql - 选择 Now() 作为 CurrentDateTime mysql 时区

postgresql - SQLAlchemy、Psycopg2 和 Postgresql COPY

python - SQLAlchemy 中跨越四个表的关系

postgresql - 无法使用 docker compose 通过 postgresql 启动 FastAPI 服务器

python - 如何在 MATLAB 中使用 python 字典对象?

python - 如何使字典列表中的值唯一?

php - mysql_real_escape_string - 访问被拒绝,取决于执行脚本的用户?

PHP/MySQL 一般错误