我有一个看起来像这样的模型类
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构造可以帮助我实现这一目标?
答案 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