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

Gan*_*ute 2 python datetime sqlalchemy iso8601 flask-sqlalchemy

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

class Test(database.Model):
       created_date = database.Column(database.DateTime,
                                      default=datetime.utcnow,
                                      nullable=False)
Run Code Online (Sandbox Code Playgroud)

我通过运行命令得到这个

all = Test.query.all()
Run Code Online (Sandbox Code Playgroud)

现在,这为我提供了格式的日期,2017-09-05 09:45:28我想获得日期的 ISO 表示形式,例如2017-09-05T09:45:28.263000.

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

erh*_*sto 8

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

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

>>> t = Test.query.all()
>>> t
[<Test object at 0x10010d2d0>, ...]
Run Code Online (Sandbox Code Playgroud)

现在 - 创建日期属性是一个日期时间对象,本身并不为您提供任何特定的表示。相反,它包含一些方法(如__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'
Run Code Online (Sandbox Code Playgroud)

SQLAlchemy 层不应该了解如何呈现数据的方式,因为 SQLAlchemy 是 ORM(模型层),并且按设计不应位于控制器/视图层:有关 mvc 的更多信息

如果您确实希望在 SQLAlchemy 模型中拥有某些属性的预定义表示,请@property在您的类中使用装饰器Test

@property
def created_date(self):
    return self.created_date.isoformat()
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅 SQLAlchemy 文档:docs