SQLAlchemy Datetime时间字段如何定义精度到毫秒? 您所在的位置:网站首页 时间格式到毫秒怎么弄出来 SQLAlchemy Datetime时间字段如何定义精度到毫秒?

SQLAlchemy Datetime时间字段如何定义精度到毫秒?

2024-06-03 03:37| 来源: 网络整理| 查看: 265

时间字段精度问题

在使用SQLALchemy作数据库操作时,遇到一个关于时间字段的问题。

我需要将一个时间格式精确到毫秒的数据保存到MySQL数据库,例如2020-05-01 9:10:30.543210这样的原始数据,但当我定义 Datetime字段后,保存进数据库的数据会被自动四舍五入到秒,比如2020-05-01 9:10:30.543210就变成了2020-05-01 9:10:31,这不是我想要的结果。

我的原始定义是这样的:

from sqlalchemy imoprt Metadata, Datetime metadata = Metadata() my_table = Table("my_table", metadata, Column("create_dt", Datetime()))

我尝试像原生mysql定义数据表时那样,使用Datetime(6)的方式来定义Columns,但依然不行,查看Datetime源码后发现它也只接收一个时区参数,并没有精度参数。

解决办法

查找一番后发现如果需要时间精度,应该使用另一个SQLAlchemy的时间类来实现,即:sqlalchemy.dialects.mysql.DATETIME类, 该类不仅接收时区参数,还可以接收一个时间精度参数fsp:

from sqlalchemy imoprt Metadata from sqlalchemy.dialects.mysql import DATETIME metadata = Metadata() my_table = Table("my_table", metadata, Column("create_dt", DATETIME(fsp=6)))

这样定义时间字段后,将能保存时间精度到毫秒,插入数据后查看,发现保存的字段内容已经变成了2020-05-01 9:10:30.543210。

开心解决!

另外

同样,如果使用Timstamp类型的时间字段需要保留时间精度,也只能导入sqlalchemy.dialects.mysql.TIMESTAMP类, 而不能使用sqlalchemy.TIMESTAMP!

在此另记录一下,若TIMESTAMP类型字段要设置默认时间和默认更新时间,需要使用text('CURRENT_TIMESTAMP')的方式定义, 若想同时使用自动更新,可使用text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')方式:

from sqlalchemy import Column, TIMESTAMP, text status = Table("status", metadata, Column("update_time", TIMESTAMP(), server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'))


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有