[英]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.