mysql - 插入时出错

标签 mysql node.js json insert sequelize.js

我正在执行这个:

const Seq = require(`sequelize`);

const seq = new Seq(`sistemadecadastro`, `root`, `Dev01891`, {
  host: `localhost`,
  dialect: `mysql`,
});

seq
  .authenticate()
  .then(function () {
    console.log(`Conectado ao MySQL com sucesso!`);
  })
  .catch(function (erro) {
    console.log(`Erro na conexao com MySQL: ` + erro);
  });

const postagem = seq.define(`postagens`, {
  titulo: {
    type: Seq.STRING,
  },
  conteudo: {
    type: Seq.TEXT,
  },
});

postagem.sync({ force: true });

postagem.create({
  titulo: `AVISO`,
  conteudo: `Four values - border-radius: 15px 50px 30px 5px; (first value applies to to`,
});

但我无法添加新记录,因为 INSERT 发生在 Sequelize 创建表的“之前”。

控制台输出:
PS C:\Projects\TestNodeMySql> node testMySQL.js
Executing (default): SELECT 1+1 AS result
Executing (default): DROP TABLE IF EXISTS `postagens`;
Executing (default): INSERT INTO `postagens` (`id`,`titulo`,`conteudo`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?,?,?);
Conectado ao MySQL com sucesso!
Executing (default): CREATE TABLE IF NOT EXISTS `postagens` (`id` INTEGER NOT NULL auto_increment , `titulo` VARCHAR(255), `conteudo` TEXT, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
Unhandled rejection SequelizeDatabaseError: Table 'sistemadecadastro.postagens' doesn't exist
    at Query.formatError (C:\Projects\TestNodeMySql\node_modules\sequelize\lib\dialects\mysql\query.js:244:16)
    at handler (C:\Projects\TestNodeMySql\node_modules\sequelize\lib\dialects\mysql\query.js:51:23)
    at Prepare.onResult (C:\Projects\TestNodeMySql\node_modules\mysql2\lib\connection.js:604:11)
    at Prepare.execute (C:\Projects\TestNodeMySql\node_modules\mysql2\lib\commands\command.js:30:14)
    at Connection.handlePacket (C:\Projects\TestNodeMySql\node_modules\mysql2\lib\connection.js:417:32)
    at PacketParser.onPacket (C:\Projects\TestNodeMySql\node_modules\mysql2\lib\connection.js:75:12)
    at PacketParser.executeStart (C:\Projects\TestNodeMySql\node_modules\mysql2\lib\packet_parser.js:75:16)
    at Socket.<anonymous> (C:\Projects\TestNodeMySql\node_modules\mysql2\lib\connection.js:82:25)
    at Socket.emit (events.js:321:20)
    at addChunk (_stream_readable.js:294:12)
    at readableAddChunk (_stream_readable.js:275:11)
    at Socket.Readable.push (_stream_readable.js:209:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:186:23)

Executing (default): SHOW INDEX FROM `postagens`

我是 node.js 和 sequelize 的新手。这部分代码仅用于我的学习目的。有什么建议吗?

最佳答案

看起来您的操作顺序是:

  • 删除表。
  • 插入到表中。
  • 创建表。

  • 颠倒步骤 2 和 3 的顺序。

    如果这是异步代码,您可能需要在尝试插入之前等待创建表步骤完成。不要让它们以任意顺序运行。

    Sequelize 是 Promise 驱动的,所以这通常就像 awaitthen() 链一样简单,例如:
    await postagem.sync({ force: true });
    
    postagem.create({
      titulo: `AVISO`,
      conteudo: `Four values - border-radius: 15px 50px 30px 5px; (first value applies to to`,
    });
    

    这是在某种 async 函数中。请注意 sync 返回一个 Promise ,这意味着如果您不小心,它可能会乱序运行。

    关于mysql - 插入时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61788079/

    相关文章:

    java - 在 Java 中从 XML 转换为 JSON

    wcf - 将 Entity Framework 对象序列化为 JSON

    c# - Linq toEntity contains 不适用于预存储的变量

    mysql - 从表中删除数据时出现 sql 错误 - 删除的目标和源

    php - mysqli_fetch_assoc 只返回数组的第一个元素

    mysql - MySQL中主二进制日志和从二进制日志有什么区别?如何在两台服务器上实现相同的二进制日志?

    node.js - Mongodb 多对多关系

    javascript - 具有下划线模板分隔符的 Node 项目在 EJS View 中发生冲突

    javascript - Node.js REPL 中的 "_"(下划线)符号是什么意思?

    c# - 将 JSON 日期解析为 C# DateTime