#node.js #sequelize.js #azure-functions
#node.js #sequelize.js #azure-функции
Вопрос:
Мне нужно удалить и вставить те же данные в таблицу.
Но в настоящее время после процессов удаления кажется, что данные все еще находятся в базе данных. Я думаю, что это было только мягкое удаление. Я не могу вставить одни и те же данные в БД, поскольку есть элементы, которые должны быть уникальными, и они не удаляются из БД.
После deleteResults
функции я предположил, что элементы теперь удалены в базу данных, но при insertQuestions
вызове она выдает ошибку, которая заключается в том, что некоторые данные совпадают с данными в БД.
Моя модель не установлена как paranoid
, поэтому я не могу использовать это force
свойство.
Как hard-delete
в Sequelize
?
Вот код для реализации удаления и вставки:
const res = await <<Model>>.destroy({
where: {
id: id
},
transaction: transaction
})
// This contains the destroy calls
const deleteResults = await deleteQuestions(questionnaireResult.id, questionnaireResult.qneQuestions, transaction);
//Insert to DB
const insertQuestionsResult = await insertQuestions(questionnaireResult.id, null, qsReponseObj.questions, answerTypes, languages, sortValuesQuestion, transaction);
Обратите внимание, что они используют одну и ту же транзакцию.
Комментарии:
1. Как дела? Ваша проблема решена?
Ответ №1:
Вы используете transaction
для выполнения этих двух операций, но, похоже, не вызывали commit()
функцию. Я провел простой тест на своем локальном компьютере, прежде чем запускать свой код, данные в users
таблице:
После того, как я выполню приведенный ниже код, удалите запись с идентификатором значения 2 и вставьте новую запись с идентификатором 2, но новым именем пользователя:
class Users extends Model {}
Users.init({
name: DataTypes.STRING
}, { sequelize, modelName: 'users' });
(async () => {
const t = await sequelize.transaction();
await Users.destroy({
where: {
id: 2
},transaction: t
});
await Users.create({
id:2,
name:"a new user name"
},{transaction:t})
await t.commit();
})().then(()=>{sequelize.close()})
.catch(error =>{console.log(error)})