node用express寫後端restful介面實戰三:sequelize操作資料庫:模型(Model)、遷移(Migration)與種子(Seeders)
一、建立模型與遷移
有了資料庫,裡面還要有 資料表
。這次的專案非常簡單,現在要建的表也只有一張,名字叫做 articles
。使用程式碼操作這些表,需要有模型
,現在咱們就來建立一個模型
。在建立模型
的時候,還會自動生成一個遷移
檔案。
$ sequelize model:generate --name Article --attributes title:string,content:text
模型的名字叫做 Article
,這張表有兩個欄位,一個是標題
,使用的是 string
型別。另一個是內容
,使用了 text
型別。如果你對資料庫還不怎麼了解,你可以先簡單的把 string
理解成比較短的字串,存的內容有限。text
字串
,可以存很多東西進去。
1.模型檔案
開啟 models/article.js
,這個就是模型檔案,使用 Node.js
操作資料庫都就需要它了。現在專案需求比較簡單,不需要在模型
中修改什麼。所以這裡咱們保持不動就好,到時候可以直接使用。
2.遷移檔案
開啟 migrations/xxx-create-article.js
,這個是遷移檔案,裡面儲存的是 Articles
的欄位。注意下,sequelize
中預設規定,模型的名稱是單數
,而資料表是複數
。
程式碼的 up
部分,可以看到除了 title
和 content
外,還自動出現了個所有表都需要有的預設欄位。第一個是 id
,你可以理解成就是給每條記錄加了一個編號
編號
,它就自己會跑出來了。
id
欄位是自增的,第一條記錄的值,自動會填上 1
。第二條,預設自動就會填上 2
了。
底下,還有兩個欄位,createdAt
和 updatedAt
。一個是新增的時候,自動會填充進時間。另一個是當修改的時候,也會自動填充進去現在的時間。
程式碼的 down
部分,是 up
的反向操作。up
是建表,而 down
部分是刪除表。up
和 down
他們都分別有自己命令來執行。
3.執行遷移
遷移檔案,咱們也是隻看看就好,不需要再調整什麼了。當我們執行命令的時候,資料庫中就會自動建擁有這些欄位的 Articles
表了。現在來執行遷移
$ sequelize db:migrate
開啟 Sequel Pro
,重新整理下,果然看到這張表了。裡面所包含的欄位,正是咱們遷移檔案
裡定義好的。
二、建立種子檔案
表建完了以後,下一步就是要填充一些測試資料進去了。這裡需要用到的是種子檔案
。先來跑命令,新建一個種子檔案
。
$ sequelize seed:generate --name article
1.修改種子
開啟 seeders/xxx-article.js
,up
程式碼部分,去掉註釋,刪除說明文字後,將表名改為Articles
。數組裡面,改成自己想要的預設資料。如果有多個數據,中間用逗號
分隔。
down
部分,去掉註釋後,只需要改表名就好了。
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.bulkInsert('Articles', [
{
title: '武漢最好吃的小吃是什麼?',
content: "肯定是三鮮豆皮,熱乾麵一點都不好吃!",
createdAt: new Date(),
updatedAt: new Date()
},
{
title: '今天天氣可真好啊',
content: "狂風暴雨特別涼快哦,歡迎每年來武漢看海!",
createdAt: new Date(),
updatedAt: new Date()
}
], {});
},
down: (queryInterface, Sequelize) => {
return queryInterface.bulkDelete('Articles', null, {});
}
};
也可以是這樣
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
/**
* Add seed commands here.
*
* Example:
* await queryInterface.bulkInsert('People', [{
* name: 'John Doe',
* isBetaMember: false
* }], {});
*/
await queryInterface.bulkInsert('Articles', [
{
title: '武漢最好吃的小吃是什麼?',
content: "肯定是三鮮豆皮,熱乾麵一點都不好吃!",
createdAt: new Date(),
updatedAt: new Date()
},
{
title: '今天天氣可真好啊',
content: "狂風暴雨特別涼快哦,歡迎每年來武漢看海!",
createdAt: new Date(),
updatedAt: new Date()
}
], {});
},
down: async (queryInterface, Sequelize) => {
/**
* Add commands to revert seed here.
*
* Example:
* await queryInterface.bulkDelete('People', null, {});
*/
await queryInterface.bulkDelete('Articles', null, {});
}
};
2.執行種子
種子檔案修改好了,這節課的最後一個命令,執行遷移。
$ sequelize db:seed:all
Tips: 上面這條命令,是執行所有的種子檔案。如果只想執行指定的種子檔案,可以執行
sequelize db:seed --seed xxx-article
重新整理資料庫,看到咱們想填充的內容,已經自動插入到資料表中了。
總結 日常開發專案資料庫操作的步驟:
步驟 | 命令 | 說明 |
---|---|---|
第一步 | sequelize model:generate --name Article --attributes ... | 建模型和遷移檔案 |
第二步 | 人工處理 | 根據需求調整模型和遷移檔案 |
第三步 | sequelize db:migrate | 執行遷移,生成資料表 |
第四步 | sequelize seed:generate --name article | 新建種子檔案 |
第五步 | 人工處理 | 將種子檔案修改為自己想填充的資料 |
第六步 | sequelize db:seed:all | 執行種子檔案,將預設資料填充到資料表中 |