xmgzxmgz/SchemaLinter
GitHub: xmgzxmgz/SchemaLinter
一款数据库模式变更影响分析工具,通过对比新旧 Schema 自动定位受影响的应用代码。
Stars: 0 | Forks: 0
# SchemaLinter



一个强大的数据库模式变更影响分析工具,帮助开发者自动识别数据库结构变化对应用代码的影响。
## 功能特性
- **智能变更检测**: 自动识别数据库模式的各种变更类型
- **多语言代码解析**: 支持 Python、Java 等主流编程语言
- **ORM 框架支持**: 支持 SQLAlchemy、Hibernate 等 ORM 框架
- **多格式报告**: 支持控制台、JSON、Markdown 等多种输出格式
- **灵活配置**: 支持配置文件和命令行参数
- **精准分析**: 准确定位受影响的代码文件和行号
## 安装
### 从源码安装
```
git clone https://github.com/xmgzxmgz/SchemaLinter.git
cd SchemaLinter
pip install -e .
```
### 安装依赖
```
pip install -r requirements.txt
```
## 快速开始
### 1. 创建配置文件
```
schemalinter init
```
这将创建一个默认的 `schemalinter.yaml` 配置文件。
### 2. 编辑配置文件
```
# 项目基本信息
project_path: "{{PROJECT_ROOT}}"
programming_language: "python"
db_connector_type: "sqlalchemy"
# 数据库模式文件
base_schema_path: "schemas/old_schema.sql"
target_schema_path: "schemas/new_schema.sql"
# 文件匹配模式
file_patterns:
include:
- "**/*.py"
- "**/*.sql"
exclude:
- "**/migrations/**"
- "**/tests/**"
- "**/venv/**"
- "**/__pycache__/**"
```
### 3. 运行分析
```
# 使用配置文件
schemalinter analyze -c schemalinter.yaml
# 或直接使用命令行参数
schemalinter analyze -p /path/to/project -b old_schema.sql -t new_schema.sql
```
## 使用示例
### 基本分析
```
schemalinter analyze \
--project-path /path/to/my/app \
--base-schema schemas/v1.sql \
--target-schema schemas/v2.sql \
--language python \
--db-connector sqlalchemy
```
### 生成 JSON 报告
```
schemalinter analyze \
--config schemalinter.yaml \
--output-format json \
--output-file report.json
```
### 生成 Markdown 报告
```
schemalinter analyze \
--config schemalinter.yaml \
--output-format markdown \
--output-file report.md
```
### 验证配置文件
```
schemalinter validate --config schemalinter.yaml
```
## 支持的变更类型
- **表操作**
- 新增表 (TABLE_ADDED)
- 删除表 (TABLE_DELETED)
- 重命名表 (TABLE_RENAMED)
- **列操作**
- 新增列 (COLUMN_ADDED)
- 删除列 (COLUMN_DELETED)
- 重命名列 (COLUMN_RENAMED)
- 列类型变更 (COLUMN_TYPE_CHANGED)
- **索引操作**
- 新增索引 (INDEX_ADDED)
- 删除索引 (INDEX_DELETED)
## 支持的编程语言和框架
### Python
- 原生 SQL 字符串
- SQLAlchemy ORM
### Java
- JDBC 原生 SQL
- Hibernate ORM (计划支持)
## 报告格式
### 控制台输出
彩色的控制台输出,包含摘要、变更详情和影响分析。
### JSON 格式
结构化的 JSON 报告,适合程序化处理和 CI/CD 集成。
### Markdown 格式
可读性强的 Markdown 报告,适合文档和展示。
## 配置选项
### 项目配置
- `project_path`: 项目根目录
- `programming_language`: 编程语言 (python, java)
- `db_connector_type`: 数据库连接方式 (raw_sql, sqlalchemy, hibernate)
### 模式文件配置
- `base_schema_path`: 基础模式文件路径
- `target_schema_path`: 目标模式文件路径
### 文件匹配配置
- `file_patterns.include`: 包含的文件模式
- `file_patterns.exclude`: 排除的文件模式
### 输出配置
- `output.format`: 输出格式 (console, json, markdown)
- `output.file`: 输出文件路径
## 退出码
- `0`: 分析完成,无问题
- `1`: 分析完成,发现问题(严重或警告级别)
- `2`: 分析过程中出现错误(配置错误、文件不存在等)
## 开发指南
### 项目结构
```
schemalinter/
├── core/ # 核心模块
│ ├── config.py # 配置管理
│ ├── schema_diff.py # 模式差异分析
│ └── analyzer.py # 主分析器
├── parsers/ # 代码解析器
│ ├── base.py # 基础解析器
│ ├── python_parser.py # Python 解析器
│ └── sql_parser.py # SQL 解析器
├── reporters/ # 报告生成器
│ ├── base.py # 基础报告器
│ ├── console_reporter.py # 控制台报告器
│ ├── json_reporter.py # JSON 报告器
│ └── markdown_reporter.py # Markdown 报告器
└── cli.py # 命令行接口
```
### 运行测试
```
pip install -e ".[dev]"
pytest
```
### 添加新的解析器
1. 继承 `BaseParser` 类
2. 实现 `get_supported_extensions()` 方法
3. 实现 `parse_file()` 方法
4. 在 `__init__.py` 中注册解析器
### 添加新的报告格式
1. 继承 `BaseReporter` 类
2. 实现 `generate_report()` 方法
3. 在 CLI 中添加新的输出格式选项
## 已知限制
- **尚未实现 Git 集成。** `git_enabled` 配置选项是预留用于未来开发的功能。
- **多表列归属依赖于启发式方法。** 当 SQL 查询引用多个表时,WHERE/SET/ORDER BY/GROUP BY 子句中的列名会归属到找到的第一张表。限定引用(`table.column`)的归属是正确的。
- **ALTER/DROP 解析为基础功能。** SQL 解析器处理常见的 ALTER 和 DROP 模式,但可能无法覆盖所有特定于数据库供应商的 SQL 语法(例如 Oracle、SQL Server 扩展)。
- **未实现 Java 和 JavaScript 解析器。** 目前仅完全支持 Python 解析。其他语言将退回到 SQL 文件解析器。
- **计划支持 Django ORM,但尚未实现。** 目前仅检测原生 SQL 字符串和 SQLAlchemy 模型。
- **列类型比较基于字符串。** 即使变更是安全的(如扩容),`VARCHAR(100)` 和 `VARCHAR(200)` 也会被视为不同的类型。
- **不支持视图、存储过程或触发器。** 目前仅分析 CREATE TABLE、ALTER TABLE 和 DROP TABLE DDL。
## License
MIT License
## 更新日志
### v1.0.0
- 初始发布
- Python 和 SQL 文件解析
- 多种输出格式(console、JSON、Markdown)
- 完整的 CLI 工具,包含 `analyze`、`init` 和 `validate` 命令
- ALTER TABLE 和 DROP TABLE 语句解析
- 问题去重
- 全面完善的日志记录
标签:LNA, ORM, Python, SOC Prime, 多线程, 开发工具, 影响分析, 数据库, 文档结构分析, 无后门, 聊天机器人, 逆向工具, 错误基检测, 静态代码分析