如何在 sequelize 标准 createdAt 字段中使用毫秒?

Posted

技术标签:

【中文标题】如何在 sequelize 标准 createdAt 字段中使用毫秒?【英文标题】:How to use milliseconds in sequelize standard createdAt field? 【发布时间】:2018-05-24 23:03:55 【问题描述】:

在 Nodejs 应用程序中,我使用 Sequelize ORM 将记录写入 mysql 数据库。默认情况下,每个表都有一个 createdAt 字段,但它只记录日期时间和秒:

mysql> SELECT createdAt FROM ticks LIMIT 3;
+---------------------+
| createdAt           |
+---------------------+
| 2017-11-08 16:34:21 |
| 2017-11-08 16:34:15 |
| 2017-11-08 16:34:27 |
+---------------------+
3 rows in set (0.00 sec)

由于我正在运行一项对时间非常敏感的服务,我还想记录毫秒。在docs I found the data types,其中包括:

Sequelize.DATE(6)  // DATETIME(6) for mysql 5.6.4+. Fractional seconds support with up to 6 digits of precision

我从不明确写 createdAt 字段(Sequelize 会自动执行此操作),所以我不确定如何使写毫秒。

谁能指出我正确的方向,以使用毫秒精度使用 createdAt 字段保存记录?欢迎所有提示!

【问题讨论】:

【参考方案1】:

我更新了模型并创建了一个迁移以利用毫秒:

型号:

import Sequelize from 'sequelize'

class Ticks extends db.instance.Model 
  static init(sequelize) 
    return super.init(
      .
      .
      createdAt: 
        allowNull: false,
        type: Sequelize.DATE(6)
      
    )
  

迁移:

export default 
  up: (queryInterface, Sequelize) => queryInterface
    .changeColumn('ticks', 'createdAt', 
      allowNull: false,
      type: Sequelize.DATE(6)
    ),
  down: (queryInterface, Sequelize) => queryInterface
    .changeColumn('ticks', 'createdAt', 
      allowNull: false,
      type: Sequelize.DATE
    )

(使用 ES6 语法)

通过这些更改,我能够让毫秒工作(尽管它似乎只有 3 个地方,尽管我指定了 6 个)

【讨论】:

【参考方案2】:

您可以在模型中明确定义createdAt,例如:

id: 
    type: Sequlieze.INTEGER(11).UNSIGNED,
    autoIncrement: true,
    primaryKey: true
,
...
...
createdAt: 
    type: schema.DATE(6),
    allowNull: true,
    defaultValue: Sequelize.fn('NOW')

或将其重命名为:

created_ts: 
    type: schema.DATE(6),
    allowNull: true,
    defaultValue: Sequelize.fn('NOW')
, 
    createdAt: created_ts

【讨论】:

这个 defaultValue 规范对我不起作用...

以上是关于如何在 sequelize 标准 createdAt 字段中使用毫秒?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Sequelize 中创建关联

如何在 Sequelize 中设置必填字段?

如何在 SEQUELIZE (nodeJS) 中创建触发器?

如何在 Sequelize 模型中定义索引?

如何在 Sequelize 中使用 Postgres 的 BIGSERIAL?

复数如何在 Sequelize 中工作?