2017-09-06 89 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 –