Sequelize连接数据库报错:找不到chevents表,请求技术帮助
Sequelize自动给表名添加"s"的解决办法
问题原因
Sequelize默认会自动将模型名转为复数形式作为对应的数据表名,所以你定义的chevent模型会被映射到chevents表,导致查询不存在的表报错。
解决办法
方法一:单个模型指定表名并关闭复数化
在定义模型时,通过第三个参数配置tableName(指定实际表名)和freezeTableName(禁止自动复数化):
import db from "../database/db.js"; import { DataTypes } from "sequelize"; const BlogModel = db.define('chevent',{ nombre: { type: DataTypes.STRING}, telefono: { type: DataTypes.STRING}, fecha: { type: DataTypes.STRING}, notas: { type: DataTypes.STRING}, }, { // 指定数据库中实际的表名 tableName: 'chevent', // 冻结表名,阻止Sequelize自动复数化 freezeTableName: true }) export default BlogModel
方法二:全局配置关闭自动复数化
如果你的项目中所有模型都使用单数表名,可以在初始化Sequelize实例时全局配置,修改db.js文件:
import { Sequelize } from 'sequelize'; // 初始化Sequelize实例时添加全局define配置 const db = new Sequelize('entornoP', '你的用户名', '你的密码', { host: 'localhost', dialect: 'mysql', // 根据你的数据库类型调整 define: { // 全局禁止表名自动复数化 freezeTableName: true } }); export default db;
这样所有模型都会直接使用定义的名称作为表名,不会自动添加"s"。
内容的提问来源于stack exchange,提问作者mayra
相关产品推荐
相关产品推荐

