请就以下问题提出建议 . 我想使用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 id
, content
FROM test_tables
AS test_table
;
并返回[] .
可能是它自愿跳转到查询'test_tables'而不是'test_table'的原因是什么?我在这里完全遗漏了什么吗?
非常感谢!
1 回答
您应该在选项中指定了表名 . 删除此新表,添加表名选项并重新提升应用程序 .
另外,我喜欢用camelcase命名我的模型 .
TestTable
. 同样适用于connection.define('TestTable'...