如何在sequelize.query中更新多个列

时间:2015-10-25 12:27:01

标签: javascript postgresql sequelize.js

现在我使用accounts更新我的表格accountId并且它的效果非常好。

return models.sequelize.query("UPDATE \"accounts\" " +
                                        "SET \"accountId\" = "+newAccount.id+" " +
                                        "WHERE \"accountId\" = "+oldAccount.id+";").spread(function(){
            return 'success';
        });

如果我不仅要更改accountId,而且要更改日期,该怎么办? 那我该怎么写呢?我尝试用逗号

编写它

"SET \"accountId\" = "+ newAccount.id+",\"date\" + newAccount.date + " WHERE...

但这似乎不起作用。

感谢您的帮助。

更新:在控制台中我收到此消息 [2015-10-25 16:42:00.909] [TRACE] main - Executing (default): UPDATE "accounts" SET "date" = Sun Oct 25 2015 16:42:00 GMT+0300 (MSK) WHERE "date" = Sun Oct 25 2015 16:41:53 GMT+0300 (MSK);但在那之后,我没有取得任何成功'消息(数据在数据库中没有变化)。可能因为数据类型而发生?我有时区的时间戳'在我的postgresql数据库中。

我猜,here可能是同一个问题

1 个答案:

答案 0 :(得分:0)

当您尝试按日期查询时,您将发送一个JavaScript日期对象,该对象将转换为本地时间的字符串。然后PostgreSQL因语法无效而拒绝这一点,因为日期没有被引用,因为它不会识别格式。

尽可能在使用Sequelize时尽量不要使用原始查询,因为Sequelize可以为您完成所有必要的序列化和反序列化。写下这个问题可以很容易地解决你的问题:

var Account = sequelize.define('account', {
  accountId: Sequelize.INTEGER,
  date: Sequelize.DATE
});

Account.update({
  accountId: newAccount.id,
  date: new Date()
}, {
  where: {
    accountId: oldAccount.id
  }
}).then(function() {
  callback('success');
});

如果您真的想使用原始查询执行此操作,则应将日期对象转换为PostgreSQL可以读取的内容。例如,您可以使用时刻库​​执行此操作:

var moment = require('moment');

models.sequelize.query("UPDATE \"accounts\" " +
 "SET \"accountId\" = " + newAccount.id + ", " +
   "\"date\" = '" + moment().format('YYYY-MM-DD HH:mm:ss') + "' " +
 "WHERE \"accountId\" = " + oldAccount.id + ";").spread(function(){
 return 'success';
});