【问题标题】:Use to_char in Flask SqlAlchemy query在 Flask SqlAlchemy 查询中使用 to_char
【发布时间】:2020-07-04 13:15:16
【问题描述】:

在我的 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 格式化结果

【问题讨论】:

    标签: postgresql flask flask-sqlalchemy


    【解决方案1】:

    使用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'
    

    【讨论】:

    • 谢谢,这正是我想要的。
    猜你喜欢
    • 2013-07-24
    • 1970-01-01
    • 2014-10-09
    • 2018-05-09
    • 2019-05-18
    • 2019-04-23
    • 2019-12-13
    • 2017-08-28
    • 1970-01-01
    相关资源
    最近更新 更多