【问题标题】:How to update with Sequelize with 'NOW()' on a timestamp?如何在时间戳上使用“NOW()”更新 Sequelize?
【发布时间】:2015-04-09 11:10:22
【问题描述】:

我正在尝试执行以下操作:

model.updateAttributes({syncedAt: 'NOW()'});

显然,这不起作用,因为它只是作为字符串传递。我想避免传递节点构造的时间戳,因为稍后我将它与另一个“ON UPDATE CURRENT_TIMESTAMP”字段进行比较,并且数据库和源可能运行不同的时间。

我唯一的选择是只创建一个数据库过程并调用它吗?

【问题讨论】:

  • new Date().toString()怎么样
  • @laggingreflex 我可以只使用 moment().format(),但我想避免以后将数据库时间与客户端生成时间进行比较。
  • 为什么不启用时间戳,所以只要调用 model.update({},{where:{my_primary_key:value}}) 就会更新 updatedAt

标签: node.js datetime sql-update sequelize.js


【解决方案1】:

您可以使用Sequelize.fn 适当地包装它:

instance.updateAttributes({syncedAt: sequelize.fn('NOW')});

这是一个完整的工作示例:

'use strict';

var Sequelize = require('sequelize');
var sequelize = new Sequelize(/*database*/'test', /*username*/'test', /*password*/'test',
    {host: 'localhost', dialect: 'postgres'});

var model = sequelize.define('model', {
    syncedAt: {type: Sequelize.DATE}
});

sequelize.sync({force: true})
    .then(function () {
        return model.create({});
    })
    .then(function () {
        return model.find({});
    })
    .then(function(instance){
        return instance.updateAttributes({syncedAt: sequelize.fn('NOW')});
    })
    .then(function () {
        process.exit(0);
    })
    .catch(function(err){
        console.log('Caught error! ' + err);
    });

产生

UPDATE "models" SET "syncedAt"=NOW(),"updatedAt"='2015-02-09 18:05:28.989 +00:00' WHERE "id"=1

【讨论】:

  • 谢谢! sequelize.fn('NOW') 正是我需要的。
  • sequelize.fn('NOW(6)') 是否支持存储小数秒/微秒?因为如果我们使用 mysql >= 5.6,现在支持 Sequelize.DATE(6) 数据类型
  • OK:sequelize.fn('NOW', 6) 支持存储小数秒/微秒。
  • 请注意,这会将实例的 syncedAt 属性设置为 {fn: "NOW", args: []} 而不是当前时间戳(因为这是由数据库确定的)。
  • 干得好!谢谢。
【解决方案2】:

值得一提(对于通过搜索来到这里的人)NOW() 不是标准的并且不能在 SQL 服务器上工作 - 所以如果您关心可移植性,请不要这样做。

sequelize.literal('CURRENT_TIMESTAMP')

可能会更好

【讨论】:

  • 谢谢,这正是我使用 SQLite3 和 Sequelize 所需要的。
【解决方案3】:

您可以使用:sequelize.literal('CURRENT_TIMESTAMP')。 示例:

await PurchaseModel.update( {purchase_date : sequelize.literal('CURRENT_TIMESTAMP') }, { where: {id: purchaseId} } );

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 2012-06-30
    • 2021-07-24
    • 2016-10-02
    • 2022-01-17
    • 2021-08-17
    • 2022-11-10
    • 2019-08-08
    • 1970-01-01
    相关资源
    最近更新 更多