在Flask SqlAlchemy查询中使用to_char

3
在我的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格式化结果。
1个回答

4

使用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关键字引用该列。

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'

谢谢,这正是我在寻找的。 - leonardorame

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接