2015-10-25 3 views
1

На данный момент я обновляю таблицу accounts с помощью accountId и работает отлично.Как обновить несколько столбцов в файле sequelize.query

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

Что делать, если я хочу изменить не только учетную запись, но, скажем, дату. Как мне его записать? Я пытался писать его с запятой

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

, но это не похоже на работу.

Цените свою помощь.

UPDATE: в консоли Я получаю это сообщение [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.

Я думаю, here может быть та же проблема

+0

Я думаю, вы пропустили один = после даты. «SET \» accountId \ "=" + newAccount.id + ", \" date \ "=" + newAccount.date + "WHERE ... –

+0

@MajidYaghouti обновил код, но никаких изменений. Фактически теперь у меня есть эта строка «UPDATE» учетные записи «SET» accountId «= (new_value)», «date» = (new_value) WHERE «accountId» = (значение), «date» = (значение); ', но это не работает вообще: accountID не обновляется. – alyona

ответ

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'; 
}); 
+0

Спасибо за помощь, но в журналах postgres я нашел эту ошибку: '2015-10-26 19:51:54 MSK ERROR: синтаксическая ошибка в точке или рядом с« 43 »при символе 55 2015-10- 26 19:51:54 MSK ЗАЯВЛЕНИЕ: ОБНОВЛЕНИЕ "Счета" SET "date" = 2015-10-26 23: 40: 45.363 + 03 WHERE "date" = 2015-10-26 19: 40: 45.363 + 03; ' – alyona

+0

Предполагая, что в столбце db 'date' вы увидите что-то вроде этого '' 2015-10-26 20: 33: 02.255 + 03 "' – alyona

+0

Вы забыли указать дату. –

Смежные вопросы