如何使用 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
而不是仅从表单中获取值。
我正在 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
而不是仅从表单中获取值。