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

Python-Flask-SQLAlchemy Get date column in ISO format

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

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 表示。

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

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

Test.query.all() returns 测试对象列表,其中每个都是您定义的模型的表示,并且应包含已声明的属性(如 creation_date)。

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

现在 - 创建日期属性是一个日期时间对象,本身不给你任何具体的表示。相反,它包含一些方法(如 __str____repr__isoformat 等),可帮助您获得日期时间对象的所需表示形式。

>>> 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(模型层)并且按照设计不应放在 controller/view 层中:more on mvc

如果你真的想在 SQLAlchemy 模型中有一些属性的预定义表示,请在你的 Test class 中使用 @property 装饰器。

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

SQLAlchemy 文档中的更多信息:docs