Python-Flask-SQLAlchemy以ISO格式获取日期列

时间:2017-09-06 10:52:31

标签: python datetime sqlalchemy flask-sqlalchemy iso8601

我有一个看起来像这样的模型类

class Test(database.Model):
       created_date = database.Column(database.DateTime,
                                      default=datetime.utcnow,
                                      nullable=False)

我通过运行命令

得到这个
all = Test.query.all()

现在,这会以格式2017-09-05 09:45:28的格式获取日期。我希望获得2017-09-05T09:45:28.263000等日期的ISO表示。

一种选择是对我收到的数据进行后处理,但更好的方法是什么?是否有任何SQLAlchemy构造可以帮助我实现这一目标?

1 个答案:

答案 0 :(得分:3)

让我们澄清一些事情,因为你的问题可能有点误导。

Test.query.all()返回Test对象的列表,其中每个对象都是您已定义的Model的表示,并且应该包含声明的属性(如creation_date)。

>>> t = Test.query.all()
>>> t
[<Test object at 0x10010d2d0>, ...]

现在 - 创建日期属性是一个日期时间对象,并不能为您提供任何特定的表示。相反,它包含一些方法(如__str____repr__isoformat等),可帮助您获得所需的datetime对象表示。

>>> t[0].created_date
datetime.datetime(2017, 3, 2, 15, 34, 10, 272)
>>> t[0].created_date.isoformat()
'2017-03-02T15:34:10.000272'

您呈现数据的方式不是SQLAlchemy层应该注意的,因为SQLAlchemy是ORM(模型层),并且设计不应该位于控制器/视图层中:{{ 3}}

如果您真的想在SQLAlchemy Models中预设某些属性,请在@property类中使用Test装饰器。

@property
def created_date(self):
    return self.created_date.isoformat()

SQLAlchemy文档中的更多内容:more on mvc