【问题标题】:Sequelize: Hard delete and Insert in a tableSequelize:在表中硬删除和插入
【发布时间】:2021-01-04 16:34:13
【问题描述】:

我需要删除并插入相同的数据到表中

但目前,在删除过程之后,数据似乎仍在数据库中。我认为这只是一个软删除。我无法将相同的数据插入数据库,因为有些项目应该是唯一的,并且没有从数据库中删除。

deleteResults函数之后,我假设这些项目现在已经删除到数据库中,但是当调用insertQuestions时,它遇到了一个错误,即某些数据与数据库中的数据相同。

我的模型没有设置为paranoid,所以我不能使用force 属性。

如何在Sequelize 中输入hard-delete

这里是删除和插入实现的代码

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);

注意他们使用的是同一个事务。

【问题讨论】:

  • 怎么样?你的问题解决了吗?

标签: node.js sequelize.js azure-functions


【解决方案1】:

您正在使用transaction 执行这两个操作,但似乎没有调用commit() 函数。在我运行代码之前,我在本地做了一个简单的测试,users 表中的数据:

在我运行下面的代码后,删除id为2的记录并插入一个id为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)})

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-18
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 2018-11-26
    • 2017-03-11
    相关资源
    最近更新 更多