# 达梦脚本转换工具
**Repository Path**: nogrief/dameng-script-conversion-tool
## Basic Information
- **Project Name**: 达梦脚本转换工具
- **Description**: 将达梦数据库脚本转换成其他数据库脚本
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-06-23
- **Last Updated**: 2025-06-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Dameng Script Conversion Tool
[](https://www.python.org/)
[](LICENSE)
[](CHANGELOG.md)
> 达梦数据库脚本转换工具 - 将达梦SQL脚本转换为MySQL/MariaDB方言,支持直接导入数据库
## 📖 项目简介
Dameng Script Conversion Tool 是一个专业的达梦数据库脚本转换工具,能够将达梦数据库的SQL脚本自动转换为MySQL/MariaDB兼容的SQL语句。该工具支持批量转换、多线程处理、缓存优化、数据库导入等功能,适用于数据库迁移和跨平台部署场景。
**🎯 特色功能:**
- **向导式运行**:提供 `run.py` 交互式脚本,无需记忆复杂参数,适合新手用户
- **命令行工具**:提供完整的命令行接口,适合自动化脚本和高级用户
- **双模式支持**:既支持交互式操作,也支持命令行批量处理
## ✨ 主要特性
### 🔄 核心转换功能
- **数据类型转换**: 自动将达梦数据类型转换为MySQL兼容类型
- **函数转换**: 转换达梦特有函数为MySQL等价函数
- **语法适配**: 处理达梦特有的SQL语法结构
- **注释处理**: 保留并转换表注释和字段注释
- **约束转换**: 自动处理主键、外键、索引等约束
### 🚀 高级功能
- **批量处理**: 支持单个文件或整个目录的批量转换
- **多线程处理**: 大文件自动分块,多线程并行处理
- **缓存机制**: 智能缓存解析结果,提升重复转换效率
- **进度显示**: 实时显示转换进度和状态
- **错误处理**: 详细的错误报告和问题定位
- **质量评估**: 自动评估转换质量并生成评分
### 🗄️ 数据库导入功能
- **MySQL导入**: 支持将转换后的SQL文件直接导入MySQL数据库
- **批量导入**: 支持大批量SQL语句的批量执行
- **流式读取+多线程导入**: 采用流式分号分割,自动拼接多行SQL,支持多线程高效导入大文件
- **进度条显示**: 美观的实时进度条,显示已用时间和剩余时间
- **失败记录**: 自动记录导入失败的SQL语句和错误信息
- **断点续传**: 支持导入中断后继续执行
- **自定义配置**: 支持自定义失败日志文件路径
### 🛠️ 实用工具
- **DROP TABLE支持**: 自动添加DROP TABLE IF EXISTS语句
- **智能函数识别**: 避免误转换字符串值为函数
- **时间戳精度处理**: 自动截断纳秒到微秒
- **Windows路径支持**: 正确处理反斜杠转义
- **完整文档**: 详细的使用指南和技术文档
### 🎨 用户体验
- **向导式运行**: 提供 `run.py` 交互式脚本,美观的彩色界面
- **智能文件选择**: 自动扫描目录,支持批量处理选择
- **配置向导**: 引导式配置,无需记忆复杂参数
- **实时进度显示**: 美观的进度条,显示处理状态
- **操作总结**: 完成后显示详细的操作摘要和日志位置
## 🚀 快速开始
### 环境要求
- **Python**: 3.8 或更高版本
- **操作系统**: Windows 10+, Linux (Ubuntu 18.04+), macOS 10.14+
- **内存**: 至少 512MB 可用内存
- **磁盘空间**: 至少 100MB 可用空间
### 安装步骤
1. **克隆项目**
```bash
git clone https://gitee.com/nogrief/dameng-script-conversion-tool.git
cd dameng-script-conversion-tool
```
2. **安装依赖**
```bash
pip install -r requirements.txt
```
3. **验证安装**
```bash
python main.py --version
```
### 基本使用
#### 🚀 快速开始(推荐)
使用向导式运行脚本,无需记忆复杂参数:
```bash
# 启动向导式运行
python run.py
```
**优势:**
- 🎯 **交互式界面**:美观的彩色界面,步骤清晰
- 📁 **智能文件选择**:自动扫描目录,支持批量处理
- ⚙️ **配置向导**:引导式配置,无需记忆参数
- 📊 **实时进度**:显示处理进度和状态
- 📋 **操作总结**:完成后显示详细的操作摘要
**支持的操作模式:**
- **仅转换**:将达梦SQL转换为MySQL SQL
- **仅导入**:导入已转换的MySQL SQL文件
- **清理缓存**:仅清理缓存文件
- **全量清理**:清理所有临时文件和输出
#### 1. SQL转换
```bash
# 基本转换
python main.py convert input.sql --db-type mysql
# 指定输出文件
python main.py convert input.sql --db-type mysql -o output.sql
# 添加DROP TABLE语句
python main.py convert input.sql --db-type mysql --add-drop-table
# 批量转换目录
python main.py convert input/ --db-type mysql -o output/
# 多线程处理大文件
python main.py convert large_file.sql --db-type mysql --max-workers 8 --chunk-size 5
```
#### 2. 数据库导入
```bash
# 基本导入
python main.py import --host localhost --port 3306 --user root --password 'your_password' --database your_db --sql-file output/xxx.sql
# 多线程高效导入(推荐大文件/高并发场景)
python main.py import --host localhost --port 3306 --user root --password 'your_password' --database your_db --sql-file output/xxx.sql --max-workers 8
# 自定义批量大小
python main.py import --host localhost --port 3306 --user root --password 'your_password' --database your_db --sql-file output/xxx.sql --batch-size 500
# 启用断点续传
python main.py import --host localhost --port 3306 --user root --password 'your_password' --database your_db --sql-file output/xxx.sql --resume
# 自定义失败日志文件
python main.py import --host localhost --port 3306 --user root --password 'your_password' --database your_db --sql-file output/xxx.sql --failed-log-file custom_failed.log
```
#### 3. 其他操作
```bash
# 清理操作
python main.py --clean # 全量清理(兼容旧版本)
python main.py clean # 全量清理
python main.py clean --only-cache # 仅清理缓存文件
python main.py clean --full-clean # 全量清理(显式指定)
# 查看版本信息
python main.py --version
```
## 📚 详细文档
- [用户手册](doc/USER_MANUAL.md)
- [技术文档](doc/TECHNICAL_DOCS.md)
- **[运行手册](doc/RUN_GUIDE.md)**: 向导式运行脚本详细使用指南
- **[转换规则](doc/CONVERSION_RULES.md)**: 完整的数据类型和函数转换规则
- **[性能优化](doc/PERFORMANCE_OPTIMIZATION.md)**: 性能优化指南和最佳实践
- **[故障排除](doc/TROUBLESHOOTING.md)**: 常见问题诊断和解决方案
- **[缓存功能](doc/CACHE_PROGRESS_FEATURE.md)**: 缓存机制详解和使用指南
- **[数据库导入指南](doc/DATABASE_IMPORT_GUIDE.md)**: 数据库导入功能详细使用指南
## 🔧 命令行参数
### 转换命令参数
```bash
python main.py convert --db-type mysql [options]
# 必需参数
# 输入的SQL文件路径或包含SQL文件的文件夹路径
--db-type mysql # 目标数据库类型
# 可选参数
-o, --output # 输出文件路径或文件夹路径 (默认: output 目录)
--chunk-size # 分块大小,单位:MB (默认: 1)
--max-workers # 最大工作线程数 (默认: 4)
--no-cache # 禁用缓存功能
--add-drop-table # 在CREATE TABLE语句前自动添加DROP TABLE语句
--force-chunk # 强制使用分块处理
--sql-parse-log # 启用SQL解析日志
```
### 导入命令参数
```bash
python main.py import [options]
# 数据库连接参数
--host # 数据库主机地址 (默认: localhost)
--port # 数据库端口 (默认: 3306)
--user # 数据库用户名 (默认: root)
--password # 数据库密码
--database # 数据库名称 (必需)
# SQL文件参数
--sql-file # 要导入的SQL文件路径 (必需)
# 导入选项
--batch-size # 批量执行大小 (默认: 1000)
--max-workers # 最大工作线程数 (默认: 1,推荐4-16,支持多线程导入)
--resume # 启用断点续传
--progress-file # 进度文件路径
--failed-log-file # 失败日志文件路径
```
### 清理命令参数
```bash
python main.py clean [options]
# 清理选项
--only-cache # 仅清理缓存文件(.json和.tmp文件)
--full-clean # 全量清理(包括输出文件、日志文件、报告文件和缓存文件)
# 兼容旧版本
python main.py --clean # 全量清理(兼容旧版本)
```
## 📊 转换示例
### 输入(达梦SQL)
```sql
-- 用户表
CREATE TABLE "SCHEMA"."USER_INFO" (
"ID" VARCHAR2(32) NOT NULL,
"USER_NAME" VARCHAR2(100) NOT NULL,
"EMAIL" VARCHAR2(200),
"PHONE" VARCHAR2(20),
"STATUS" NUMBER(1) DEFAULT 1,
"CREATE_TIME" TIMESTAMP DEFAULT SYSDATE,
"UPDATE_TIME" TIMESTAMP DEFAULT SYSTIMESTAMP,
CLUSTER PRIMARY KEY("ID") ENABLE
);
-- 表注释
COMMENT ON TABLE "SCHEMA"."USER_INFO" IS '用户信息表';
-- 字段注释
COMMENT ON COLUMN "SCHEMA"."USER_INFO"."ID" IS '用户ID';
COMMENT ON COLUMN "SCHEMA"."USER_INFO"."USER_NAME" IS '用户名';
-- 插入数据
INSERT INTO "SCHEMA"."USER_INFO" ("ID", "USER_NAME", "EMAIL", "PHONE", "STATUS", "CREATE_TIME")
VALUES ('001', 'admin', 'admin@example.com', '13800138000', 1, TO_DATE('2024-01-01 10:00:00', 'YYYY-MM-DD HH24:MI:SS'));
```
### 输出(MySQL SQL)
```sql
-- 用户表
DROP TABLE IF EXISTS `user_info`;
CREATE TABLE `user_info` (
`id` VARCHAR(32) NOT NULL COMMENT '用户ID',
`user_name` VARCHAR(100) NOT NULL COMMENT '用户名',
`email` VARCHAR(200),
`phone` VARCHAR(20),
`status` TINYINT DEFAULT 1,
`create_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`update_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户信息表';
-- 插入数据
INSERT INTO `user_info` (`id`, `user_name`, `email`, `phone`, `status`, `create_time`)
VALUES ('001', 'admin', 'admin@example.com', '13800138000', 1, '2024-01-01 10:00:00');
```
## 🤝 贡献
欢迎提交 Issue 和 Pull Request!
- **Gitee Issues**: https://gitee.com/nogrief/dameng-script-conversion-tool/issues
- **Gitee Pull Requests**: https://gitee.com/nogrief/dameng-script-conversion-tool/pulls
## 📄 许可证
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
## 🙏 致谢
感谢所有为这个项目做出贡献的开发者!
## 版本历史
### v1.4.5
- 修复大文件分块分割点查找,避免在字符串内分号处分割SQL,提升SQL解析安全性。