Files
playwrite/docs/ENV_MIGRATION.md
Misaka aaa46ef282 feat: migrate configuration to .env environment variables
This commit implements a complete migration from JSON-based configuration
to .env environment variables, providing better security and flexibility.

Key Changes:
- Add python-dotenv dependency for environment variable support
- Create config/env_loader.py with type conversion utilities
- Add from_env() class methods to all config dataclasses
- Update ConfigLoader to prioritize environment variables
- Add save_to_env() method for .env file management
- Implement database connection factory pattern
- Add base DAO and connection classes for better abstraction
- Support both SQL Server and MySQL with unified interface
- Create migration script (scripts/migrate_to_env.py)
- Update GUI to read/write .env files
- Add comprehensive migration documentation

New Files:
- config/env_loader.py - Environment variable loader
- db/base_connection.py - Base database connection interface
- db/base_dao.py - Base DAO with common utilities
- db/connection_factory.py - Factory for creating connections
- db/mysql_connection.py - MySQL-specific connection
- db/sqlserver_connection.py - SQL Server-specific connection
- db/table_name_converter.py - SQL dialect converter
- scripts/migrate_to_env.py - Configuration migration tool
- docs/ENV_MIGRATION.md - Complete migration guide
- .env.example - Environment variable template

Testing:
- Verified MySQL connection (8.0.44)
- Tested all DAO operations
- Confirmed 150 tables accessible
- Validated configuration loading

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 22:39:14 +08:00

263 lines
6.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# .env 配置迁移指南
本文档说明如何将现有的 JSON 配置迁移到 .env 环境变量配置。
## 迁移原因
使用 .env 环境变量配置的优势:
1. **更好的安全性**: .env 文件不会被提交到版本控制(已添加到 .gitignore
2. **更灵活的配置**: 可以在不同环境(开发、测试、生产)中使用不同的配置
3. **标准化**: 遵循 12-factor 应用配置最佳实践
4. **更简单**: 配置格式更简洁,易于维护
## 迁移步骤
### 方法 1: 从现有 JSON 配置迁移(推荐)
如果你已经有 `config/user_settings.json` 配置文件,可以使用迁移脚本自动转换:
```bash
python scripts/migrate_to_env.py migrate
```
该脚本会:
- 读取 `config/user_settings.json` 文件
- 创建 `.env` 文件
- 备份原 JSON 配置到 `config/user_settings.json.backup`
### 方法 2: 从模板创建新的配置
如果是首次配置,从模板创建:
```bash
python scripts/migrate_to_env.py from-example
```
该脚本会:
- 复制 `.env.example``.env`
- 提示你编辑 `.env` 文件填入实际配置
### 手动配置
1. 复制 `.env.example``.env`:
```bash
cp .env.example .env
```
2. 编辑 `.env` 文件,填入实际的配置值:
```bash
# ERP 系统配置
ERP_URL=https://your-erp-system.com/
ERP_USERNAME=your_username
ERP_PASSWORD=your_password
# 数据库配置
DB_TYPE=sqlserver # 或 mysql
DB_SERVER=192.168.1.100
DB_NAME=YourDatabase
DB_USERNAME=your_db_username
DB_PASSWORD=your_db_password
```
## 配置验证
运行测试脚本验证配置是否正确加载:
```bash
python tests/test_env_config.py
```
## 环境变量参考
### ERP 系统配置
| 变量名 | 说明 | 默认值 |
|--------|------|--------|
| `ERP_URL` | ERP 系统地址 | `https://68.11.34.30:8082/` |
| `ERP_USERNAME` | ERP 用户名 | `BLDpengqiangqiang` |
| `ERP_PASSWORD` | ERP 密码 | (必填) |
| `ERP_HEADLESS` | 无头模式 | `true` |
| `ERP_IGNORE_HTTPS_ERRORS` | 忽略 HTTPS 错误 | `true` |
| `ERP_AUTO_CLOSE_BROWSER` | 自动关闭浏览器 | `true` |
### 数据库配置SQL Server
| 变量名 | 说明 | 默认值 |
|--------|------|--------|
| `DB_TYPE` | 数据库类型 | `sqlserver` |
| `DB_SERVER` | SQL Server 地址 | `192.168.110.114` |
| `DB_NAME` | 数据库名称 | `CompanyDB` |
| `DB_USERNAME` | 数据库用户名 | `peng` |
| `DB_PASSWORD` | 数据库密码 | (必填) |
| `DB_SQLSERVER_DRIVER` | ODBC 驱动 | `ODBC Driver 18 for SQL Server` |
| `DB_TRUST_SERVER_CERTIFICATE` | 信任服务器证书 | `yes` |
### 数据库配置MySQL
| 变量名 | 说明 | 默认值 |
|--------|------|--------|
| `DB_TYPE` | 数据库类型 | `mysql` |
| `DB_MYSQL_HOST` | MySQL 主机地址 | `192.168.31.83` |
| `DB_MYSQL_PORT` | MySQL 端口 | `3306` |
| `DB_MYSQL_CHARSET` | 字符集 | `utf8mb4` |
### 路径配置
| 变量名 | 说明 | 默认值 |
|--------|------|--------|
| `PATH_DATA_DIR` | 数据目录 | `D:/python/playwrite/data/` |
| `PATH_PRODUCTION_ID_FILE` | Production ID 文件名 | `ProductionID.txt` |
| `PATH_DEFAULT_OUTPUT` | 默认输出文件名 | `离散备料计划维护_合并.xlsx` |
| `PATH_VALIDATION_OUTPUT` | 校验输出文件名 | `物料状态校验结果.xlsx` |
### 数据提取配置
| 变量名 | 说明 | 默认值 |
|--------|------|--------|
| `EXTRACTION_BATCH_SIZE` | 批次大小 | `100` |
| `EXTRACTION_VERBOSE` | 详细日志 | `true` |
| `EXTRACTION_AUTO_CONVERT` | 自动转换 Excel | `true` |
| `EXTRACTION_MERGE_BATCHES` | 合并批次 | `true` |
| `EXTRACTION_ENABLE_DB_PERSISTENCE` | 保存到数据库 | `false` |
### 校验配置
| 变量名 | 说明 | 默认值 |
|--------|------|--------|
| `VALIDATION_DATA_SOURCE` | 数据源类型 | `database_full` |
| `VALIDATION_USE_DATABASE` | 使用数据库 | `true` |
| `VALIDATION_BATCH_SIZE` | 数据库批次大小 | `2000` |
| `VALIDATION_ENABLE_CRUD` | 启用 CRUD 操作 | `false` |
| `VALIDATION_DEFAULT_MANAGER` | 默认负责人 | (空) |
| `VALIDATION_MATCH_MODE` | 匹配模式 | `substring` |
## 切换数据库类型
要切换数据库类型,修改 `.env` 文件中的 `DB_TYPE` 变量:
### 切换到 MySQL
```bash
# 编辑 .env 文件
DB_TYPE=mysql
DB_NAME=BLD_DB
DB_USERNAME=remote_user
DB_PASSWORD=your_mysql_password
DB_MYSQL_HOST=192.168.31.83
DB_MYSQL_PORT=3306
```
### 切换到 SQL Server
```bash
# 编辑 .env 文件
DB_TYPE=sqlserver
DB_NAME=CompanyDB
DB_USERNAME=peng
DB_PASSWORD=your_sqlserver_password
DB_SERVER=192.168.110.114
```
## 在代码中使用配置
### 使用 ConfigLoader推荐
```python
from config.loader import ConfigLoader
# 加载配置(自动从环境变量)
config = ConfigLoader.load()
# 访问配置
erp_url = config.erp.url
db_type = config.database.db_type
```
### 直接从环境变量创建配置
```python
from config.schema import AppConfig
# 从环境变量创建配置
config = AppConfig.from_env()
```
### 使用 ConfigManagerGUI
```python
from gui.config_manager import ConfigManager
# 创建配置管理器
config_manager = ConfigManager(use_env=True)
# 访问配置
erp_url = config_manager.get("erp.url")
```
## GUI 设置界面
GUI 设置界面已更新为读写 .env 文件。所有通过界面修改的配置会自动保存到 `.env` 文件。
## 回滚方案
如果迁移后出现问题,可以回滚:
1. 恢复 JSON 配置:
```bash
cp config/user_settings.json.backup config/user_settings.json
```
2. 删除 .env 文件:
```bash
rm .env
```
3. 修改代码使用 JSON 配置(需要修改 `ConfigManager` 初始化参数):
```python
config_manager = ConfigManager(use_env=False)
```
## 安全注意事项
1. **永远不要将 .env 文件提交到版本控制**
- `.env` 已添加到 `.gitignore`
- 只提交 `.env.example` 模板文件
2. **保护敏感信息**
- 不要在代码中硬编码密码
- 使用强密码
- 定期更换密码
3. **文件权限**
- 确保 .env 文件只有你本人可读
- 在 Linux/Mac 上: `chmod 600 .env`
## 故障排除
### 配置未生效
1. 确认 `.env` 文件存在于项目根目录
2. 检查环境变量名称是否正确(区分大小写)
3. 重启应用程序以重新加载配置
### 迁移脚本错误
1. 检查 Python 版本(需要 Python 3.8+
2. 确保已安装 `python-dotenv`: `pip install python-dotenv`
3. 查看错误信息并相应解决
### 数据库连接失败
1. 验证数据库配置是否正确
2. 检查数据库服务是否运行
3. 确认网络连接正常
4. 查看数据库驱动是否已安装
## 进一步阅读
- [12-factor App: Config](https://12factor.net/config)
- [python-dotenv 文档](https://github.com/theskumar/python-dotenv)