为现有MySQL数据库定义Sequelize模型

时间:2017-08-31 13:03:58

标签: mysql node.js sequelize.js

请就以下问题提出建议。我想使用Sequelize来处理现有的数据库。

使用的堆栈:

- Node.js v6.10.3
- MySQL 2nd Gen 5.7 running on Google Cloud
- Sequelize 4.7.5

MySQL包含1个表 - 'test_table',列'id','content','status'并保存一些数据。

我想定义testTable模型,它将“解释”我的MySQL'test_table'用于续集,所以我运行:

const connection = new Sequelize("dbName", "user", "pass", {
                                     host: xxx.xxx.xxx.xxx,
                                     dialect: mysql
                                 });
const testTable = connection.define('test_table', {
                                      id: {type: Sequelize.INTEGER, 
                                           allowNull: false, unique: true, 
                                           primaryKey: true, autoIncrement: 
                                           true},
                                      content: {type: Sequelize.STRING},
                                      status: {type: Sequelize.STRING},
                                   });

我得到的第一个惊喜是,从这一刻起,Node完全忽略了'test_table'的存在并创建了它的'analogue'(???)。

C:\Users\dmitri\Desktop\app>node query.js

Executing (default): CREATE TABLE IF NOT EXISTS `test_tables` (`id` INTEGER NOT NULL auto_increment UNIQUE , `content` VARCHAR(255), `status` INTEGER, `createdAt` DATETIME NOT NULL, `updatedAt` DAT
ETIME NOT NULL, UNIQUE `test_tables_id_unique` (`id`), PRIMARY KEY (`id`)) ENGINE=InnoDB;


Executing (default): SELECT `id`, `content`, `status`, `createdAt`, `updatedAt` FROM `test_tables` AS `test_table`;
Executing (default): SHOW INDEX FROM `test_tables`

现在MySQL包含两个表:

 - 'test_table' (singular) 
 - 'test_tables' (plural) identical to "test_table" but empty.

我正在尝试通过执行以下Sequelize代码 SELECT id ,内容FROM test_table`

testTable
    .findAll({attributes: ['id', 'content']})
    .then(result=>{
           console.log(result)
         })

而不是返回'test_table'的内容,节点一直忽略它:

C:\ Users \ dmitri \ Desktop \ app> node query.js 执行(默认):SELECT idcontent FROM test_tables AS test_table;

并返回[]。

它自愿跳转到查询'test_tables'而不是'test_table'的原因是什么?我在这里完全遗漏了什么吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

您应该在选项中指定了表名。删除此新表,添加表名选项并重新提升应用程序。

connection.define('test_table', {
  //.... your fields
}, {
  tableName: 'test_table'
});

另外,我希望我的模型以camelcase命名。 TestTableconnection.define('TestTable'...

也是如此