postgresql - 在 Flask SqlAlchemy 查询中使用 to_char

标签 postgresql flask flask-sqlalchemy

在我的 Flask 模型中,我有这一列:

datetime = db.Column(db.DateTime, nullable=False, default=datetime.now)  

当我从 PostgreSql 数据库填充行时,我得到了这个:

2020-07-03 18:12:49.362271
2020-07-04 09:21:34.644202

现在,我想使用 Postgresql 中的 to_char 函数来格式化这些结果。查询应该是这样的:

select to_char(datetime, 'YYYY-MM-DD HH24:MI:SS') as datetime from order_detail;

结果是这样的:

---------------------
 2020-07-03 18:12:49
 2020-07-04 09:21:34
(2 rows)

我如何告诉 Flask-SqlAlchemy 在查询 order_detail 表时执行该函数?

重要提示:我不想在我的 Flask 应用程序中进行格式化,我想让 Postgresql 格式化结果

最佳答案

使用column_property()func()。假设您的模型名为 Foo:

from sqlalchemy import func
from sqlalchemy.orm import column_property

class Foo(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    datetime = db.Column(db.DateTime, nullable=False, default=datetime.now)
    formatted_datetime = column_property(func.to_char(datetime, 'YYYY-MM-DD HH24:MI:SS'))

# print(Foo.query.all()[0].formatted_datetime)
# ->'2020-07-04 06:59:09'

如果模型的属性名称是 datetime 很重要,您需要为基础列提供不同的属性名称并使用它的 name kwarg 引用该列。

class Foo2(db.Model):
    __tablename__ = 'foo'
    id = db.Column(db.Integer, primary_key=True)
    orig_datetime = db.Column(db.DateTime, name='datetime', nullable=False, default=datetime.now)
    datetime = column_property(func.to_char(orig_datetime, 'YYYY-MM-DD HH24:MI:SS'))

# print(Foo2.query.all()[0].datetime)
# ->'2020-07-04 06:59:09'

关于postgresql - 在 Flask SqlAlchemy 查询中使用 to_char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62729604/

相关文章:

php - 将 PostgreSQL 连接库添加到 Azure 应用服务中

python - 每表行 flask 4 个项目

postgresql - 在 SQLAlchemy 中打印计算出的距离

python - 如何从模型生成的表单中指定我想要的小部件(例如 TextArea 而不是简单的文本输入)? flask SQLAlchemy WTForms

postgresql - plpgsql:引发通知输出仅在 pgAdmin 中显示

sql - 合并相同的表但保持单独的参照完整性

postgresql - 根据字段生成序列

python - SQLAlchemy:从特定用户的favorite_series中检索所有剧集

python - Gunicorn 工作人员在长时间的 API 调用后自行重启

python - 如何在 SQLAlchemy 中过滤列上的 SQL 查询?