如何在时间戳上使用带有 'NOW()' 的 Sequelize 进行更新?
How to update with Sequelize with 'NOW()' on a timestamp?
我正在尝试执行以下操作:
model.updateAttributes({syncedAt: 'NOW()'});
显然,这不起作用,因为它只是作为字符串传递。我想避免传递一个节点构建的时间戳,因为稍后我将它与另一个 'ON UPDATE CURRENT_TIMESTAMP' 字段进行比较,数据库和源可能是 运行 不同的时间。
我唯一的选择是创建一个数据库过程并调用它吗?
您可以使用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
值得一提的是(对于通过搜索来到这里的人)NOW() 不是标准的并且不能在 SQL 服务器上工作 - 所以如果你关心便携性就不要这样做。
sequelize.literal('CURRENT_TIMESTAMP')
可能效果更好
您可以使用:sequelize.literal('CURRENT_TIMESTAMP')
。
示例:
await PurchaseModel.update( {purchase_date : sequelize.literal('CURRENT_TIMESTAMP') }, { where: {id: purchaseId} } );
我正在尝试执行以下操作:
model.updateAttributes({syncedAt: 'NOW()'});
显然,这不起作用,因为它只是作为字符串传递。我想避免传递一个节点构建的时间戳,因为稍后我将它与另一个 'ON UPDATE CURRENT_TIMESTAMP' 字段进行比较,数据库和源可能是 运行 不同的时间。
我唯一的选择是创建一个数据库过程并调用它吗?
您可以使用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
值得一提的是(对于通过搜索来到这里的人)NOW() 不是标准的并且不能在 SQL 服务器上工作 - 所以如果你关心便携性就不要这样做。
sequelize.literal('CURRENT_TIMESTAMP')
可能效果更好
您可以使用:sequelize.literal('CURRENT_TIMESTAMP')
。
示例:
await PurchaseModel.update( {purchase_date : sequelize.literal('CURRENT_TIMESTAMP') }, { where: {id: purchaseId} } );