GithubHelp home page GithubHelp logo

zhangmingfeng / easy-migrate Goto Github PK

View Code? Open in Web Editor NEW
9.0 3.0 1.0 40 KB

数据库migrate工具,可以自动生成迁移语句,目前暂支持MySQL,欢迎Issues和PR

JavaScript 96.59% HTML 3.41%
migrate auto-migrate sequelize mysql migration

easy-migrate's Introduction

easy-migrate

简单高效的migrate工具,可以根据模型配置文件自动生成迁移语句,开发人员只需要关注配置文件的增删改即可,无需关心迁移的语句

特性

  • 本工具的模型管理是基于sequelize,如需要手动修改migration文件,请参考它的API
  • 模型配置文件简单,目前只支持MySQL,根据配置文件的变化和数据库当前表结构的对比,自动生成迁移语句,开发人员只需要维护配置文件即可
  • 根据MySQL常用的数据类型,目前只支持MySQL的INT、VARCHAR、DECIMAL、DATETIME、DATE、TEXT、LONGTEXT,其他类型,如FLOAT、DOUBLE,可以使用DECIMAL代替,CHAR使用VARCHAR代替
  • 后续版本会支持更多种数据库,sequelize支持的都可以

安装

$ npm i easy-migrate -g
$
$ migrate
Usage: migrate [options] [command]

Options:
  -V, --version  output the version number
  -h, --help     output usage information

Commands:
  config         show migrate config
  create         Create a new migration
  up             Migrate up to a give migration version, default lastest
  down           Migrate down to a given migration version, default current pre-version
  help [cmd]     display help for [cmd]

使用

migrate create

$ migrate create -h
Usage: migrate-create [options] <name>

Options:
  -V, --version                output the version number
  --define-path <path>         Set define file path
  --db-config-path <path>      Set db config path
  --migrations-path <path>     Set migrations out path
  --model-path <path>          Set sequelize model file out path
  -h, --help                   output usage information
  • --define-path: 执行模型配置文件的目录(项目开发过程中一般按模块开发的话,模型也应该是模块级的),可以是一个文件,也可以通过设置环境变量: MIGRATE_DEFINE_PATH
  • --db-config-path: 数据库的配置文件路径,也可以通过设置环境变量: MIGRATE_DB_CONFIG_PATH
  • --migrations-path: 生成的migration文件输出目录,也可以通过设置环境变量: MIGRATE_MIGRATIONS_PATH
  • --model-path: 当项目使用sequelize作为orm工具的时候,model定义文件可以根据配置文件自动生成,配置输出目录即可,也可以通过设置环境变量: MIGRATE_MODEL_PATH
$ migrate create --define-path /path/to/define/somemodule --db-config-path /path/to/db/config --migrations-path /path/to/migrations
migration file '20181011164723-migration.js' created!

或者

$ MIGRATE_DEFINE_PATH=/path/to/define/somemodule MIGRATE_DB_CONFIG_PATH=/path/to/db/config MIGRATE_MIGRATIONS_PATH=/path/to/migrations migrate create
use MIGRATE_DB_CONFIG_PATH for db config: /path/to/db/config
use MIGRATE_DEFINE_PATH for define path: /path/to/entity/somemodule
use MIGRATE_MIGRATIONS_PATH for migrations path: /path/to/migrations
migration file '20181011164723-migration.js' created!
  • 20181011164723-migration.js
'use strict';

/**
* Auto-created by execute migrate-create script, Please do not modify it manually!
*/
module.exports = {
    up: async function (queryInterface, Sequelize) {
        // add columns    
        await queryInterface.createTable('table_test1', {
            columns1: {
            type: Sequelize.INTEGER(11),
            allowNull: false,
            primaryKey: true,
            autoIncrement: true,
            comment: 'columns1 comment'
        },
            columns2: {
            type: Sequelize.STRING(32),
            allowNull: false,
            comment: 'columns2 comment'
        },
            columns3: {
            type: Sequelize.DECIMAL(11, 2),
            defaultValue: 0,
            allowNull: true,
            comment: 'columns3 comment'
        },
            columns4: {
            type: Sequelize.DATE,
            comment: 'columns4 comment'
        }
    });    

        // modify columns    

        // drop columns    

        // drop indexs    

        // add indexs    
        await queryInterface.addIndex('table_test1', {
            type: 'UNIQUE',
            fields: ['columns2'],
            name: 'index_columns2_un'
        });    
        await queryInterface.addIndex('table_test1', {
            fields: ['columns3', 'columns4'],
            name: 'index_columns3_columns4'
        });    
    },

    down: async function (queryInterface, Sequelize) {
        // add columns    

        // modify columns    

        // drop columns    
        await queryInterface.dropTable('table_test1');    

        // drop indexs    

        // add indexs    
    }
};

数据库配置文件如下:

module.exports = {
    dialect: 'mysql',
    database: 'database',
    username: 'root',
    password: 'admin@123',
    timezone: '+08:00',
    host: '127.0.0.1',
    port: '3306',
};

模型配置文件如下:

module.exports = {
    tableName: 'table_test1',
    columns: {
        columns1: {
            type: 'integer',
            length: 11,
            allowNull: false,
            primaryKey: true,
            autoIncrement: true,
            comment: 'columns1 comment'
        },
        columns2: {
            type: 'string',
            length: 32,
            allowNull: false,
            comment: 'columns2 comment'
        },
        columns3: {
            type: 'decimal',
            precision: 11,
            scale: 2,
            defaultValue: 0.00,
            allowNull: true,
            comment: 'columns3 comment'
        },
        columns4: {
            type: 'date',
            comment: 'columns4 comment'
        }
    },
    indexs: {
        index_columns2_un: {
            type: 'UNIQUE',
            fields: ['columns2']
        },
        index_columns3_columns4: {
            fields: ['columns3', 'columns4']
        }
    }
};

migrate up

$ migrate up -h
Usage: migrate-up [options] <name>

Options:
  -V, --version               output the version number
  --db-config-path <path>     Set db config path
  --target-version <version>  Migrate up to a give migration version, default lastest
  --migrations-path <path>    Set migrations path
  -h, --help                  output usage information
  • --db-config-path: 数据库的配置文件路径,也可以通过设置环境变量: MIGRATE_DB_CONFIG_PATH
  • --target-version: 指定迁移的版本,默认是当前migration文件中版本最新的
  • --migrations-path: migration文件所在目录,也可以通过设置环境变量: MIGRATE_MIGRATIONS_PATH
$ migrate up --db-config-path /path/to/db/config --migrations-path /path/to/migrations
now version is up to 20181011164723

或者

$ MIGRATE_DB_CONFIG_PATH=/path/to/db/config MIGRATE_MIGRATIONS_PATH=/path/to/migrations migrate up
use MIGRATE_DB_CONFIG_PATH for db config: /path/to/db/config
use MIGRATE_MIGRATIONS_PATH for migrations path: /path/to/migrations
now version is up to 20181011164723
mysql> show table table_test1;
| table_test1 | CREATE TABLE `table_test1` (
  `columns1` int(11) NOT NULL AUTO_INCREMENT COMMENT 'columns1 comment',
  `columns2` varchar(32) NOT NULL COMMENT 'columns2 comment',
  `columns3` decimal(11,2) DEFAULT '0.00' COMMENT 'columns3 comment',
  `columns4` datetime DEFAULT NULL COMMENT 'columns4 comment',
  PRIMARY KEY (`columns1`),
  UNIQUE KEY `index_columns2_un` (`columns2`),
  KEY `index_columns3_columns4` (`columns3`,`columns4`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

migrate down

$ migrate down -h
Usage: migrate-down [options] <name>

Options:
  -V, --version               output the version number
  --db-config-path <path>     Set db config path
  --target-version <version>  Migrate down to a give migration version, default lastest
  --migrations-path <path>    Set migrations path
  -h, --help                  output usage information
  • --db-config-path: 数据库的配置文件路径,也可以通过设置环境变量: MIGRATE_DB_CONFIG_PATH
  • --target-version: 指定迁移的版本,默认是当前数据库最新版本
  • --migrations-path: migration文件所在目录,也可以通过设置环境变量: MIGRATE_MIGRATIONS_PATH
$ migrate down --db-config-path /path/to/db/config --migrations-path /path/to/migrations
now version is down to 0

或者

$ MIGRATE_DB_CONFIG_PATH=/path/to/db/config MIGRATE_MIGRATIONS_PATH=/path/to/migrations migrate up
use MIGRATE_DB_CONFIG_PATH for db config: /path/to/db/config
use MIGRATE_MIGRATIONS_PATH for migrations path: /path/to/migrations
now version is down to 0

easy-migrate's People

Contributors

funswe avatar zhangmingfeng avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

funswe

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.