轻量级数据库对比工具,同时支持新增表的默认数据导入!
项目描述
**mysqldiff是一个能够方便大家在实际项目中生成不同版本的数据库之间的差异SQL,同时自动将新版中新增还能够快速表中默认数据一并导入到旧版本中。* *
### 1\。主要功能 ###
mysql 虽然提供了 mysqldiff 工具,但实际使用中还有些不满足要求的,而且在 Linux 下一般都是本地的两种python环境,所以用 python 写了一个。
* 比对数据库的差异
* 比对外表的重表 的处理表的差异; * 支持表 中的顺序
;
* 自动添加数据表 的处理表的顺序; * 支持同步新增 或列表中的处理表; * 支持表中的同步更新数据导入到新增表中; * 将生成的执行不同的sql保存到文件或自动; * 记录错误日志,出错时方便排查。 ### 2\. 使用方法 **mysqldiff.py**用[web.py](http://webpy.org/ "web.py")作为连接数据库的工具,因此在使用之前要确保环境中已经安装web.py模块,如果没有安装,可以使用下面的命令进行: ``` pip install web.py ``` **命令格式:** ```
python mysqldiff.py [param1] [param2] { [param3]....}
```
**参数说明:**
* -x
执行差异 SQL 语句,默认不执行。
* -c
是否插入添加中的默认数据
* s=[user]:[pass]@[host]:[port]
当两个数据库的连接配置相同时可以使用该参数,否则使用下面的sn和so分别指定。
user:用户名
pass:密码
host:ip地址
port:端口
* so=[user][pass]@[host]:[port]
数据库配置。
* sn=[user:[pass]@[host]:[port]
被* [ db_new
]{.[table_name]}:[db_old]{.[table_name]}
数据库名.表名,不指名表名时对比整个数据库。
* file=[diff_file]差异
化sql保存位置,默认保存在diff.sql文件中。
**示例:**
对比db_new和db_old两个数据库中的表结构差异,并将sql语句保存到diff.sql中,同时直接执行sql语句:
```
python mysqldiff.py -xs=comclay:123456@192.168.16.122:3306 db_new :db_old 文件=diff.sql
```
### 3\。`map.config`映射关系配置###
map.config文件中包含重命名和数据导入的配置 重命名配置使用
`->`表示:
```
# 重命名
# oldtable -> newtable
# oldtable.oldcol - > newtable.newcol
# oldtable.[oldcol1, oldcol12, oldcol3 ......] -> newtable.[newcol1, newcol2, newcol3 ......]
course_old -> course
user.name -> user_new.username
` ``
数据导入配置用`=>`表示:
```
#数据导入
# oldtable => newtable
# oldtable.[oldcol1, oldcol12, oldcol3 ......] => newtable.[newcol1, newcol2, newcol3 ......]
course_old.[id, user_id] => user_course.[course_id, user_id]
` ``
### 4\。对比 ###
db_old 数据库中只包含用户表:

db_new 数据库中添加了一个课程,并添加了一个外键约束:
![] (https://i.imgur.com/Yq2AQa5.png)

使用类别命令进行差异化对比:
```
python mysqldiff.py -cs =comclay:123456@192.168.18.149:3306 db_new:db_old
``
生成的diff.sql:
``sql
/********************** ********* 关闭外键约束 ******************************/
SET FOREIGN_KEY_CHECKS=0;
/****************************** 课程 ****************** ************/
CREATE TABLE `course` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`course` varchar(32) COLLATE utf8_unicode_ci默认 NULL,
`grade` int(11) 默认值 '0',
主键 (`id`),
键 `fk` (`user_id`),
约束 `fk` 外键 (`user_id`) 参考 `user` (` id`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO course (grade, course, user_id, id) VALUES
(60, 'english', 1, 1);
/****************************** 开启外键约束 *************** ******************/
SET FOREIGN_KEY_CHECKS=1;
```
### 5\. 联系方式###
微信:

### 1\。主要功能 ###
mysql 虽然提供了 mysqldiff 工具,但实际使用中还有些不满足要求的,而且在 Linux 下一般都是本地的两种python环境,所以用 python 写了一个。
* 比对数据库的差异
* 比对外表的重表 的处理表的差异; * 支持表 中的顺序
;
* 自动添加数据表 的处理表的顺序; * 支持同步新增 或列表中的处理表; * 支持表中的同步更新数据导入到新增表中; * 将生成的执行不同的sql保存到文件或自动; * 记录错误日志,出错时方便排查。 ### 2\. 使用方法 **mysqldiff.py**用[web.py](http://webpy.org/ "web.py")作为连接数据库的工具,因此在使用之前要确保环境中已经安装web.py模块,如果没有安装,可以使用下面的命令进行: ``` pip install web.py ``` **命令格式:** ```
python mysqldiff.py [param1] [param2] { [param3]....}
```
**参数说明:**
* -x
执行差异 SQL 语句,默认不执行。
* -c
是否插入添加中的默认数据
* s=[user]:[pass]@[host]:[port]
当两个数据库的连接配置相同时可以使用该参数,否则使用下面的sn和so分别指定。
user:用户名
pass:密码
host:ip地址
port:端口
* so=[user][pass]@[host]:[port]
数据库配置。
* sn=[user:[pass]@[host]:[port]
被* [ db_new
]{.[table_name]}:[db_old]{.[table_name]}
数据库名.表名,不指名表名时对比整个数据库。
* file=[diff_file]差异
化sql保存位置,默认保存在diff.sql文件中。
**示例:**
对比db_new和db_old两个数据库中的表结构差异,并将sql语句保存到diff.sql中,同时直接执行sql语句:
```
python mysqldiff.py -xs=comclay:123456@192.168.16.122:3306 db_new :db_old 文件=diff.sql
```
### 3\。`map.config`映射关系配置###
map.config文件中包含重命名和数据导入的配置 重命名配置使用
`->`表示:
```
# 重命名
# oldtable -> newtable
# oldtable.oldcol - > newtable.newcol
# oldtable.[oldcol1, oldcol12, oldcol3 ......] -> newtable.[newcol1, newcol2, newcol3 ......]
course_old -> course
user.name -> user_new.username
` ``
数据导入配置用`=>`表示:
```
#数据导入
# oldtable => newtable
# oldtable.[oldcol1, oldcol12, oldcol3 ......] => newtable.[newcol1, newcol2, newcol3 ......]
course_old.[id, user_id] => user_course.[course_id, user_id]
` ``
### 4\。对比 ###
db_old 数据库中只包含用户表:

db_new 数据库中添加了一个课程,并添加了一个外键约束:
![] (https://i.imgur.com/Yq2AQa5.png)

使用类别命令进行差异化对比:
```
python mysqldiff.py -cs =comclay:123456@192.168.18.149:3306 db_new:db_old
``
生成的diff.sql:
``sql
/********************** ********* 关闭外键约束 ******************************/
SET FOREIGN_KEY_CHECKS=0;
/****************************** 课程 ****************** ************/
CREATE TABLE `course` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`course` varchar(32) COLLATE utf8_unicode_ci默认 NULL,
`grade` int(11) 默认值 '0',
主键 (`id`),
键 `fk` (`user_id`),
约束 `fk` 外键 (`user_id`) 参考 `user` (` id`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO course (grade, course, user_id, id) VALUES
(60, 'english', 1, 1);
/****************************** 开启外键约束 *************** ******************/
SET FOREIGN_KEY_CHECKS=1;
```
### 5\. 联系方式###
微信:

项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
mysqldiff.py-2.0.0.tar.gz
(3.3 kB
查看哈希)
内置分布
mysqldiff.py-2.0.0-py2-none-any.whl
(9.6 kB
查看哈希)
关
mysqldiff.py -2.0.0.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 9a99f5196cfb79859900670d29024f0ec8f5f8057aa85a5566316bdf36e75249 |
|
| MD5 | bc9d6585a4a2150c3ecca8e968d7ba21 |
|
| 布莱克2-256 | a386cf021d46b15b0bf38041fb235acba0d0baf59b66619f6c7cb1674a3ab0e8 |
关
mysqldiff.py -2.0.0-py2-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 63f7ae08d9108b5180e1a5434ced161fc8c8bb9e5933558c458c204606bbc4f0 |
|
| MD5 | b5c2eda93d2ed20a51c8fb27a7e671b6 |
|
| 布莱克2-256 | 660239e2984549c5c871f3c5719c0777eeef13a44ec3368b585fd56bb46adfd7 |