# 达梦脚本转换工具 **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 [![Python](https://img.shields.io/badge/Python-3.8+-blue.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![Version](https://img.shields.io/badge/Version-1.4.5-orange.svg)](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解析安全性。