[英]Defining Sequelize model for existing MySQL database
請就以下問題提出建議。 我想使用 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”的存在並創建了它的“模擬”(???)。
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 ,
content FROM
test_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”的原因可能是什么? 我在這里完全錯過了什么嗎?
非常感謝!
您應該已經在選項中指定了表名。 刪除這個新表,添加表名選項並重新提升應用程序。
connection.define('test_table', {
//.... your fields
}, {
tableName: 'test_table'
});
順便說一句,我喜歡用駝峰命名我的模型。 TestTable
。 connection.define('TestTable'...
編輯:作為您的評論,我澄清了幾件事:
sequelize.sync()
(除非你知道它做什么並且你想要它)。 否則你可能會遇到問題(比如創建另一個表,因為它找不到它要找的表)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.