zoukankan      html  css  js  c++  java
  • 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 运行种子文件,将默认数据填充到数据表中
  • 相关阅读:
    HTML页面空格记录     (小计)
    JS对象、构造器函数和原型对象之间的关系
    情人节,送女友一桶代码可否?
    JavaScript中的BOM和DOM
    js中字符替换函数String.replace()使用技巧
    XML DOM 节点类型(Node Types)
    node 基础
    npm脚本命令npm run script的使用
    Node.js学习笔记六,获取get/post请求的参数
    querystring模块详解
  • 原文地址:https://www.cnblogs.com/chenxi188/p/13836312.html
Copyright © 2011-2022 走看看