Sequelize 表名更改
Posted
技术标签:
【中文标题】Sequelize 表名更改【英文标题】:Sequelize table name change 【发布时间】:2018-09-27 21:10:05 【问题描述】:已将 mysql 数据库中的表从 users
重命名为 user
。在Express
中,我正在运行Sequelize
并为旧的users
表创建了一个模式。随着表重命名并且代码中的所有内容都从 users
更改为 user
,Sequelize
仍在寻找一个专门命名为 users
的表,即使表名在架构中已更新。
User = db.sequelize.define('user',
first_name: Sequelize.STRING,
last_name: Sequelize.STRING,
email: Sequelize.STRING,
password: Sequelize.STRING,
role: Sequelize.STRING,
created_at: Sequelize.DATE,
updated_at: Sequelize.DATE
);
尝试运行此程序以用Sequelize
生成的表覆盖该表,但它仍然创建了一个名为users
的表
User.sync(force: true).then(() =>
// Table created
return User.create(
firstName: 'test',
lastName: 'test',
email: 'test@example.com',
password: 'password'
);
);
其他人有同样的经历吗?我还缺少其他配置吗?这就是我在创建第一个表时所做的一切。
【问题讨论】:
这能回答你的问题吗? How to make Sequelize use singular table names 【参考方案1】:Sequelize 默认复数表名,设置freezeTableName: true
来改变这种行为。
User = db.sequelize.define('user',
first_name: Sequelize.STRING,
last_name: Sequelize.STRING,
email: Sequelize.STRING,
password: Sequelize.STRING,
role: Sequelize.STRING,
created_at: Sequelize.DATE,
updated_at: Sequelize.DATE
,
freezeTableName: true
);
【讨论】:
感谢您的回答。我是 nodeJS 的新手,花了很多时间来确定续集出了什么问题。非常感谢。【参考方案2】:我使用 Sequelize 框架已经有好几年了,但我很确定该框架默认具有复数表名的概念。
根据内存,需要在 create
中提供配置以防止这种情况发生 - 因此,结合您的非复数表名,您还需要指定 freezeTableName: true
。
看起来文档是这样说的:
http://docs.sequelizejs.com/manual/tutorial/models-definition.html#configuration
【讨论】:
【参考方案3】:最近的续集版本允许您这样做
up: async (queryInterface, Sequelize) => queryInterface.showAllTables().then(async (tables) => any function)
【讨论】:
以上是关于Sequelize 表名更改的主要内容,如果未能解决你的问题,请参考以下文章
更新 Sequelize 模型时,失败并返回与我提供的不同的表名?
如何在 Sequelize ORM 中获取不带前缀表名的连接数据结果