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

时间字段精度问题

在使用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'))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值