Sequelize: жесткое удаление и вставка в таблицу

#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)})
 

Результат:
введите описание изображения здесь