Sequelize 表名更改

Posted

技术标签:

【中文标题】Sequelize 表名更改【英文标题】:Sequelize table name change 【发布时间】:2018-09-27 21:10:05 【问题描述】:

已将 mysql 数据库中的表从 users 重命名为 user。在Express 中,我正在运行Sequelize 并为旧的users 表创建了一个模式。随着表重命名并且代码中的所有内容都从 users 更改为 userSequelize 仍在寻找一个专门命名为 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 中获取不带前缀表名的连接数据结果

Sequelize:在生产中更改模型架构

如何在使用 Sequelize 更改列或添加新列时更新迁移文件

表不存在 Sequelize

更改数据库模型 - Sequelize