如何更新 sequelize.query 中的多个列
How can I update multiple columns in sequelize.query
现在我用 accountId
更新了我的 table 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);
但在那之后我没有收到任何 'success' 消息(数据库中的数据没有改变)。可能因为数据类型而发生吗?我的 postgresql 数据库中有 'timestamp with time zone'。
我猜,here可能是同样的问题
当您尝试按日期查询时,您发送的是 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 可以读取的东西。例如,您可以使用 moment 库执行此操作:
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';
});
现在我用 accountId
更新了我的 table 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);
但在那之后我没有收到任何 'success' 消息(数据库中的数据没有改变)。可能因为数据类型而发生吗?我的 postgresql 数据库中有 'timestamp with time zone'。
我猜,here可能是同样的问题
当您尝试按日期查询时,您发送的是 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 可以读取的东西。例如,您可以使用 moment 库执行此操作:
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';
});