2017-09-06 51 views
0

我有一个看起来像这样Python的烧瓶SQLAlchemy中获取ISO格式的日期列

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我希望得到ISO 2017-09-05T09:45:28.263000这样的日期。

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

回答

2

让我们澄清一些事情,因为您的问题可能有点误导。 Test.query.all()返回Test对象的列表,其中每个都是您定义的Model的表示,并且应该包含声明的属性(如creation_date)。

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

现在 - 创建日期属性是一个DateTime对象,不给你任何具体的表现本身。相反,它包含一些方法(如__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(模型层)和设计不应该在控制器/视图层奠定了数据的方式:more on mvc

如果您确实想在SQLAlchemy模型中预定义一些属性,请在Test类中使用@property修饰符。

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

更多对SQLAlchemy的文档中:docs

+0

你点是正确的!我确实错过了系列化照顾'棉花糖'图书馆的部分。我提出了另一个自定义序列化的问题https://stackoverflow.com/questions/46074589/python-marshmallow-customize-formatting-of-class-member –