SQLAlchemy Datetime时间字段如何定义精度到毫秒? | 您所在的位置:网站首页 › 时间格式到毫秒怎么弄出来 › 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')) |
CopyRight 2018-2019 实验室设备网 版权所有 |