1. 程式人生 > 實用技巧 >node用express寫後端restful介面實戰三:sequelize操作資料庫:模型(Model)、遷移(Migration)與種子(Seeders)

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 部分,可以看到除了 titlecontent 外,還自動出現了個所有表都需要有的預設欄位。第一個是 id,你可以理解成就是給每條記錄加了一個編號

。到時候需要修改哪條記錄,直接叫它的編號,它就自己會跑出來了。

id 欄位是自增的,第一條記錄的值,自動會填上 1。第二條,預設自動就會填上 2了。

底下,還有兩個欄位,createdAtupdatedAt。一個是新增的時候,自動會填充進時間。另一個是當修改的時候,也會自動填充進去現在的時間。

程式碼的 down 部分,是 up 的反向操作。up是建表,而 down 部分是刪除表。updown 他們都分別有自己命令來執行。

3.執行遷移

遷移檔案,咱們也是隻看看就好,不需要再調整什麼了。當我們執行命令的時候,資料庫中就會自動建擁有這些欄位的 Articles 表了。現在來執行遷移

$ sequelize db:migrate

開啟 Sequel Pro,重新整理下,果然看到這張表了。裡面所包含的欄位,正是咱們遷移檔案裡定義好的。

二、建立種子檔案

表建完了以後,下一步就是要填充一些測試資料進去了。這裡需要用到的是種子檔案。先來跑命令,新建一個種子檔案

$ sequelize seed:generate --name article

1.修改種子

開啟 seeders/xxx-article.jsup 程式碼部分,去掉註釋,刪除說明文字後,將表名改為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 執行種子檔案,將預設資料填充到資料表中