首页 文章

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

提问于
浏览
0

请就以下问题提出建议 . 我想使用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'用于sequelize,所以我运行:

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代码 SELECTid,contentFROMtest_table`

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

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

C:\ Users \ dmitri \ Desktop \ app> node query.js Executing(default):SELECT idcontent FROM test_tables AS test_table ;

并返回[] .

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

非常感谢!

1 回答

  • 1

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

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

    另外,我喜欢用camelcase命名我的模型 . TestTable . 同样适用于 connection.define('TestTable'...

相关问题