sequelize-li 管理mysql

386 阅读2分钟

安装

npm i sequelize sequelize-cli mysql2 --save

使用sequelize-li

查看命令 node_modules/.bin/sequelize

这个命令有些长,可用npx sequelize代替

初始化 npx sequelize init

命令执行之后会生成 consfig,migrations,models,seeders 文件夹

config

  • 创建数据库 npx sequelize db:create
{
  "development": {
    "username": "root",
    "password": null,
    "database": "wy_development",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "operatorsAliases": false
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "wy_test",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "operatorsAliases": false
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "wy_production",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "operatorsAliases": false
  }
}
  • 创建出错 npx sequelize db:create

所以修改如下,因为自己只建立development环境的数据库,所以只修改development

"development": {
    "username": "root",
    "password": "123456",
    "database": "wy_development",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }

如果想建立别的环境的数据库,要先在项目目录的终端环境中 set NODE_ENV = '环境名'然后npx sequelize db:create

models/migrations

  • 创建模型 npx sequelize model:create --name User --attributes username:STRING models/migrations 文件夹内会有新的文件生成
  • 迁移 npx sequelize db:migrate 在数据库中生成User表
  • 撤销 npx sequelize db:migrate:undo 执行migrations里时间最近文件的down方法,默认删除对应的表。 npx sequelize db:migrate:undo --name 20200507073255-create-user 撤销指定的文件 name 在数据库的SequelizeMeta表中,该表默认生成
  • 为表格新增字段 npx sequelize migration:generate --name userAdd 建立一个新的迁移文件20200507084344-userAdd.js。 并在其中做如下配置。queryInterface 的方法看 这里
'use strict';

module.exports = {
  up: (queryInterface, Sequelize) => {
    /*
      Add altering commands here.
      Return a promise to correctly handle asynchronicity.

      Example:
      return queryInterface.createTable('users', { id: Sequelize.INTEGER });
    */
    return queryInterface.addColumn(
      'Users',  // 表名
      'age', {  // 新增字段
        type: Sequelize.TINYINT,
        allowNull: false,
        defaultValue: 0
      }
    )
  },

  down: (queryInterface, Sequelize) => {
    /*
      Add reverting commands here.
      Return a promise to correctly handle asynchronicity.

      Example:
      return queryInterface.dropTable('users');
    */
    return queryInterface.removeColumn('Users', 'age');
  }
};

之后 npx sequelize db:migrate文件会运行20200507084344-userAdd.js,中的up方法,在User表中新增字段成功。

queryInterface的方法是api中的方法

seed

主要方便数据的操作

  • 创建seed文件 npx sequelize seed:generate --name makeUser 在seeders文件夹下生成20200507092428-makeUser.js文件,并对其进行设置
'use strict';

module.exports = {
  up: (queryInterface, Sequelize) => {
    /*
      Add altering commands here.
      Return a promise to correctly handle asynchronicity.

      Example:
      return queryInterface.bulkInsert('People', [{
        name: 'John Doe',
        isBetaMember: false
      }], {});
    */
    return queryInterface.bulkInsert('User', [{
      name: '张三',
      age: 80
    }], {});
  },

  down: (queryInterface, Sequelize) => {
    /*
      Add reverting commands here.
      Return a promise to correctly handle asynchronicity.

      Example:
      return queryInterface.bulkDelete('People', null, {});
    */

    return queryInterface.bulkDelete('User', null, {});
  }
};

npx sequelize db:seed:all执行所有的种子文件, 数据插入成功,但是seed文件是默认是没有历史记录的,所以要手动更改配置,在config/consfig.json文件中做如下配。 配置有jsonsequelize2种方式, json把记录存在项目中,sequelize把记录存在数据库的表中。 详细看 这里

 //  "seederStorage": "json",
 //   "seederStoragePath": "sequelizeData.json"
"development": {
    "username": "root",
    "password": "123456",
    "database": "wy_development",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "seederStorage": "sequelize",
    "seederStorageTableName": "sequelize_data"
  },