簡體   English   中英

如何更新sequelize.query中的多列

[英]How can I update multiple columns in sequelize.query

現在,我用accountId更新我的表accounts ,它運行良好。

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); 但是之后,我沒有收到任何“成功”消息(db中的數據沒有更改)。 是否可能因為數據類型而發生? 我的PostgreSQL數據庫中有“帶時區的時間戳”。

我想, 這里可能是同樣的問題

當您嘗試按日期查詢時,您正在發送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';
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM