https://github.com/zhangmingfeng/easy-migrate
数据库migrate工具,可以自动生成迁移语句,目前暂支持MySQL,欢迎Issues和PR
https://github.com/zhangmingfeng/easy-migrate
auto-migrate migrate migration mysql sequelize
Last synced: 6 months ago
JSON representation
数据库migrate工具,可以自动生成迁移语句,目前暂支持MySQL,欢迎Issues和PR
- Host: GitHub
- URL: https://github.com/zhangmingfeng/easy-migrate
- Owner: zhangmingfeng
- Created: 2018-09-25T10:16:35.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-12-27T05:06:12.000Z (over 5 years ago)
- Last Synced: 2024-11-20T05:06:19.319Z (6 months ago)
- Topics: auto-migrate, migrate, migration, mysql, sequelize
- Language: JavaScript
- Homepage:
- Size: 39.1 KB
- Stars: 9
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# easy-migrate
简单高效的migrate工具,可以根据模型配置文件自动生成迁移语句,开发人员只需要关注配置文件的增删改即可,无需关心迁移的语句
# 特性
- 本工具的模型管理是基于[sequelize](https://github.com/sequelize/sequelize),如需要手动修改migration文件,请参考它的API
- 模型配置文件简单,目前只支持MySQL,根据配置文件的变化和数据库当前表结构的对比,自动生成迁移语句,开发人员只需要维护配置文件即可
- 根据MySQL常用的数据类型,目前只支持MySQL的INT、VARCHAR、DECIMAL、DATETIME、DATE、TEXT、LONGTEXT,其他类型,如FLOAT、DOUBLE,可以使用DECIMAL代替,CHAR使用VARCHAR代替
- 后续版本会支持更多种数据库,sequelize支持的都可以# 安装
```bash
$ npm i easy-migrate -g
$
$ migrate
Usage: migrate [options] [command]Options:
-V, --version output the version number
-h, --help output usage informationCommands:
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```bash
$ migrate create -h
Usage: migrate-create [options]Options:
-V, --version output the version number
--define-path Set define file path
--db-config-path Set db config path
--migrations-path Set migrations out path
--model-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
```bash
$ 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!
```
或者
```bash
$ 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`
```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
}
};
```
数据库配置文件如下:``` js
module.exports = {
dialect: 'mysql',
database: 'database',
username: 'root',
password: 'admin@123',
timezone: '+08:00',
host: '127.0.0.1',
port: '3306',
};
```模型配置文件如下:
```js
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
```bash
$ migrate up -h
Usage: migrate-up [options]Options:
-V, --version output the version number
--db-config-path Set db config path
--target-version Migrate up to a give migration version, default lastest
--migrations-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```bash
$ migrate up --db-config-path /path/to/db/config --migrations-path /path/to/migrations
now version is up to 20181011164723
```
或者
```bash
$ 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
``````bash
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
```bash
$ migrate down -h
Usage: migrate-down [options]Options:
-V, --version output the version number
--db-config-path Set db config path
--target-version Migrate down to a give migration version, default lastest
--migrations-path Set migrations path
-h, --help output usage information```
- --db-config-path: 数据库的配置文件路径,也可以通过设置环境变量: MIGRATE_DB_CONFIG_PATH
- --target-version: 指定迁移的版本,默认是当前数据库最新版本
- --migrations-path: migration文件所在目录,也可以通过设置环境变量: MIGRATE_MIGRATIONS_PATH```bash
$ migrate down --db-config-path /path/to/db/config --migrations-path /path/to/migrations
now version is down to 0
```
或者
```bash
$ 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
```