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