如何使用 Sequelize 将值 'null' 插入到 MariaDB 中?

How to insert value 'null' into MariaDB with Sequelize?

我正在 Node.js 构建一个应用程序来管理编码学校的数据库。到目前为止,我有 2 个模型:课程和教师。 在添加课程的表格中,我插入了一个选项 not select a teacher for a course.

我可以在使用 DB GUI 时毫无问题地插入 'null' 的值:

INSERT INTO courses (name, start_date, end_date, hours, teacher_id) VALUES ("Databases", '2020-04-18', '2020-04-19', 1, null);

但它在表格中不起作用。 这是我的课程模块:

const { Sequelize, DataTypes } = require('sequelize');
const db = require('../config/database');
const Teachers = require('./Teachers');

const Courses = db.define('Courses', {
  course_id: {
    type: DataTypes.INTEGER,
    primaryKey: true,
    autoIncrement: true
  },
  name: {
    type: DataTypes.STRING(40)
  },
  hours: {
    type: DataTypes.INTEGER
  },
  start_date: {
    type: DataTypes.DATEONLY
  },
  end_date: {
    type: DataTypes.DATEONLY
  },
  teacher_id: {
    type: DataTypes.INTEGER,
    allowNull: true,
    references: {
      model: Teachers,
      key: 'teacher_id'
    }
  }
}, {
  freezeTableName: true
});

Courses.belongsTo(Teachers, {foreignKey: 'teacher_id'});

module.exports = Courses;

这是我表单中用于添加课程的 select 选项:
(我也尝试过使用 value="NULL" 或空字符串。)

<select 
  type="number"
  name="teacher_id" 
  id="teacher_id" 
  class="input-box">
    <option value="" selected disabled hidden>Please select</option>
    <option value="null">not determined yet</option>
    <option value="2">Jane Doe</option>
    <option value="5">Steven Smith</option>
    <option value="11">Arthur Miller</option>
</select>

这是我的长错误信息:


Executing (default): INSERT INTO `Courses` (`course_id`,`name`,`hours`,`start_date`,`end_date`,`teacher_id`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?,?,?,?,?,?);
DatabaseError [SequelizeDatabaseError]: (conn=2067, no: 1366, SQLState: 22007) Incorrect integer value: 'null' for column `codingschool`.`courses`.`teacher_id` at row 1
sql: INSERT INTO `Courses` (`course_id`,`name`,`hours`,`start_date`,`end_date`,`teacher_id`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?,?,?,?,?,?); - parameters:['HTML & CSS','1','2021-03-16','2021-03-19','null','2021-03-16 20:13:35.832','2021-03-16 20:13...]
    at Query.formatError (/Users/cb/Clients/Hamburg Coding School/node_modules/sequelize/lib/dialects/mariadb/query.js:280:16)
    at Query.run (/Users/cb/Clients/Hamburg Coding School/node_modules/sequelize/lib/dialects/mariadb/query.js:66:18)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
    at async /Users/cb/Clients/Hamburg Coding School/node_modules/sequelize/lib/sequelize.js:619:16
    at async MySQLQueryInterface.insert (/Users/cb/Clients/Hamburg Coding School/node_modules/sequelize/lib/dialects/abstract/query-interface.js:748:21)
    at async model.save (/Users/cb/Clients/Hamburg Coding School/node_modules/sequelize/lib/model.js:3954:35)
    at async Function.create (/Users/cb/Clients/Hamburg Coding School/node_modules/sequelize/lib/model.js:2207:12) {
  parent: SqlError: (conn=2067, no: 1366, SQLState: 22007) Incorrect integer value: 'null' for column `codingschool`.`courses`.`teacher_id` at row 1
  sql: INSERT INTO `Courses` (`course_id`,`name`,`hours`,`start_date`,`end_date`,`teacher_id`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?,?,?,?,?,?); - parameters:['HTML & CSS','1','2021-03-16','2021-03-19','null','2021-03-16 20:13:35.832','2021-03-16 20:13...]
      at Object.module.exports.createError (/Users/cb/Clients/Hamburg Coding School/node_modules/mariadb/lib/misc/errors.js:55:10)
      at PacketNodeEncoded.readError (/Users/cb/Clients/Hamburg Coding School/node_modules/mariadb/lib/io/packet.js:505:19)
      at Query.readResponsePacket (/Users/cb/Clients/Hamburg Coding School/node_modules/mariadb/lib/cmd/resultset.js:46:28)
      at PacketInputStream.receivePacketBasic (/Users/cb/Clients/Hamburg Coding School/node_modules/mariadb/lib/io/packet-input-stream.js:104:9)
      at PacketInputStream.onData (/Users/cb/Clients/Hamburg Coding School/node_modules/mariadb/lib/io/packet-input-stream.js:169:20)
      at Socket.emit (events.js:315:20)
      at addChunk (_stream_readable.js:309:12)
      at readableAddChunk (_stream_readable.js:284:9)
      at Socket.Readable.push (_stream_readable.js:223:10)
      at TCP.onStreamRead (internal/stream_base_commons.js:188:23) {
    fatal: false,
    errno: 1366,
    sqlState: '22007',
    code: 'ER_TRUNCATED_WRONG_VALUE_FOR_FIELD',
    sql: 'INSERT INTO `Courses` (`course_id`,`name`,`hours`,`start_date`,`end_date`,`teacher_id`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?,?,?,?,?,?);',
    parameters: [
      'HTML & CSS',
      '1',
      '2021-03-16',
      '2021-03-19',
      'null',
      '2021-03-16 20:13:35.832',
      '2021-03-16 20:13:35.832'
    ]
  },
  original: SqlError: (conn=2067, no: 1366, SQLState: 22007) Incorrect integer value: 'null' for column `codingschool`.`courses`.`teacher_id` at row 1
  sql: INSERT INTO `Courses` (`course_id`,`name`,`hours`,`start_date`,`end_date`,`teacher_id`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?,?,?,?,?,?); - parameters:['HTML & CSS','1','2021-03-16','2021-03-19','null','2021-03-16 20:13:35.832','2021-03-16 20:13...]
      at Object.module.exports.createError (/Users/cb/Clients/Hamburg Coding School/node_modules/mariadb/lib/misc/errors.js:55:10)
      at PacketNodeEncoded.readError (/Users/cb/Clients/Hamburg Coding School/node_modules/mariadb/lib/io/packet.js:505:19)
      at Query.readResponsePacket (/Users/cb/Clients/Hamburg Coding School/node_modules/mariadb/lib/cmd/resultset.js:46:28)
      at PacketInputStream.receivePacketBasic (/Users/cb/Clients/Hamburg Coding School/node_modules/mariadb/lib/io/packet-input-stream.js:104:9)
      at PacketInputStream.onData (/Users/cb/Clients/Hamburg Coding School/node_modules/mariadb/lib/io/packet-input-stream.js:169:20)
      at Socket.emit (events.js:315:20)
      at addChunk (_stream_readable.js:309:12)
      at readableAddChunk (_stream_readable.js:284:9)
      at Socket.Readable.push (_stream_readable.js:223:10)
      at TCP.onStreamRead (internal/stream_base_commons.js:188:23) {
    fatal: false,
    errno: 1366,
    sqlState: '22007',
    code: 'ER_TRUNCATED_WRONG_VALUE_FOR_FIELD',
    sql: 'INSERT INTO `Courses` (`course_id`,`name`,`hours`,`start_date`,`end_date`,`teacher_id`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?,?,?,?,?,?);',
    parameters: [
      'HTML & CSS',
      '1',
      '2021-03-16',
      '2021-03-19',
      'null',
      '2021-03-16 20:13:35.832',
      '2021-03-16 20:13:35.832'
    ]
  },
  sql: 'INSERT INTO `Courses` (`course_id`,`name`,`hours`,`start_date`,`end_date`,`teacher_id`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?,?,?,?,?,?);',
  parameters: [
    'HTML & CSS',
    '1',
    '2021-03-16',
    '2021-03-19',
    'null',
    '2021-03-16 20:13:35.832',
    '2021-03-16 20:13:35.832'
  ]
}

非常感谢您的观看!

它看起来像一个“null”!= null 问题。可能您正在尝试插入字符串“null”。因此出现错误消息。 tearcher_id 必须是整数或 null,但不能是 "null"。

检查代码中创建课程对象的位置。如果在表单中选择了选项“null”,则必须设置 course.teacher = null 而不是仅从表单中获取值。