红薯不甜 2024-04-08 11:04 采纳率: 0%
浏览 13

Sequelize 插入数据的时候没有自动自增id?

Sequelize 插入数据的时候没有自动自增id?

表结构:

{
    id: { type: DataTypes.INTEGER.UNSIGNED, autoIncrement: true, primaryKey: true, allowNull: false },
    enid: { type: DataTypes.STRING(100), unique: true, allowNull: false },
    name: { type: DataTypes.STRING(100), unique: true, allowNull: false },
    update_time: { type: DataTypes.DATE, defaultValue: DataTypes.NOW, allowNull: false },
    index: { type: DataTypes.TINYINT.UNSIGNED, defaultValue: 0, allowNull: false },
    pid: { type: DataTypes.INTEGER.UNSIGNED, allowNull: true },
    logo: { type: DataTypes.STRING(200), allowNull: true },
    view: { type: DataTypes.INTEGER.UNSIGNED, defaultValue: 0, allowNull: false },
    intro: { type: DataTypes.STRING(1000), allowNull: false },
}

同步到数据库后:

img


第一次插入数据正常:

img


img


插入第二条数据就会报错:
(数据: { enid: 'ddfffff', name: 'Ddfffff', index: 7, pid: null, intro: 'aaaaaaaaaaaaaaaaa' })

img


大家帮忙看看是哪里的问题??
第二次插入数据的时候如果添加id: 1,就能插入成功,否则失败!

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-08 11:04
    关注

    引自免费微信小程序:皆我百晓生

    首先,我理解您在询问如何解决 Sequelize 插入数据时遇到的 issue。这个问题主要涉及到两个部分:数据库同步以及数据插入。

    1. 数据库同步:
    Sequelize.sync({
        up: true,
        down: true,
        force: true,
    }).then(() => console.log('Database synchronization complete!'))
    .catch(err => console.error('Error occurred while synchronizing the database:', err));
    

    这个方法主要用于更新数据库的结构,它会尝试自动地更新所有的表格。如果您想强制执行同步操作,可以使用 force 参数。但是需要注意的是,这种方法可能会导致数据丢失。

    1. 数据插入:

    这是一个更复杂的问题,涉及到多行的插入语句和错误处理。为了简化这个问题,我们可以在数据库插入之前对所有可能的数据进行验证。例如:

    if (!['id', 'enid', 'name', 'update_time', 'index', 'pid', 'logo', 'view', 'intro'].includes(dbParams.id)) {
        console.error('Invalid ID provided!');
        return;
    }
    
    if (!['id', 'enid', 'name', 'update_time', 'index', 'pid', 'logo', 'view', 'intro'].includes(dbParams.enid)) {
        console.error('Invalid ENID provided!');
        return;
    }
    
    if (!['id', 'enid', 'name', 'update_time', 'index', 'pid', 'logo', 'view', 'intro'].includes(dbParams.name)) {
        console.error('Invalid NAME provided!');
        return;
    }
    
    // ... other validation checks
    
    if (!dbParams.enid || !dbParams.name || !dbParams.updateTime || !dbParams.index || !dbParams.pid || !dbParams.logo || !dbParams.view || !dbParams.intro) {
        console.error('Invalid data provided!');
        return;
    }
    

    这个方法会检查数据库参数中的每个字段是否为空。如果不为空,那么就可以将这些字段添加到结果集中。

    同时,对于插入的数据,您需要确保 id、enid、name、update_time、index、pid 和 logo 等字段都已经被正确设置并且是唯一的。

    最后,如果你正在使用 Node.js 和 Sequelize 进行开发,你应该已经对这两个工具有了一些基本的理解。如果有任何疑问或者需要进一步的帮助,请随时告诉我。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月8日

悬赏问题

  • ¥15 网络爬虫 在北京新发地抓取数据
  • ¥15 在centos7安装conda
  • ¥15 c#调用yolo3 dll文件获取的数据对不上
  • ¥20 WPF 如何实现多语言,label 和cs(live Charts)中是否都能翻译
  • ¥15 STM32F103上电短路问题
  • ¥15 关于#单片机#的问题:以ATMEGA128或相近型号单片机为控制器设计直流电机调速的闭环控制系统(相关搜索:设计报告|软件设计|流程图)
  • ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。