Как использовать миллисекунды в сиквелизировании стандартного поля созданного на месте?

0

В приложении Nodejs я использую Sequelize ORM для записи записей в базу данных mysql. По умолчанию каждая таблица имеет поле createdAt, но только запись datetime с секундами:

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)

Поскольку у меня работает очень чувствительная служба, я также хотел бы записать миллисекунды. В документах я нашел типы данных, которые включают:

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

Я никогда явно не писал поле createdAt, хотя (Sequelize делает это автоматически), поэтому я не уверен, как это сделать, чтобы писать миллисекунды.

Может ли кто-нибудь указать мне в правильном направлении сохранить записи в поле createdAt с использованием миллисекундной точности? Все советы приветствуются!

Теги:
datetime
milliseconds

2 ответа

0

Я обновил модель и создал миграцию для использования миллисекунд:

Модель:

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)

И с этими изменениями мне удалось заставить миллисекунды работать (хотя, похоже, это всего лишь три места, хотя я указал 6)

0

Вы можете определить 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
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню