# MySQL数据库配置说明 ## 功能说明 系统现在支持双数据库存储: - **SQLite**:本地数据库(dibang.db),用于快速访问和备份 - **MySQL**:远程数据库,用于数据集中管理和多用户访问 所有数据操作会**同时**写入两个数据库,确保数据冗余和可用性。 ## 配置步骤 ### 1. 安装MySQL依赖 确保已安装MySQL依赖包: ```bash pip install -r requirements.txt ``` 这会安装 `pymysql` 包。 ### 2. 创建MySQL数据库 在MySQL服务器上创建数据库: ```sql CREATE DATABASE dibang CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` ### 3. 配置MySQL连接信息 编辑 `config.py` 文件,修改以下配置: ```python # MySQL数据库配置 MYSQL_CONFIG = { 'host': '你的MySQL服务器地址', # 例如: '192.168.1.100' 或 'localhost' 'port': 3306, # MySQL端口,默认3306 'user': '你的MySQL用户名', # 例如: 'root' 'password': '你的MySQL密码', # 你的MySQL密码 'database': 'dibang', # 数据库名称(建议保持'dibang') 'charset': 'utf8mb4' # 字符集 } # 是否启用MySQL存储(True=启用,False=仅使用SQLite) ENABLE_MYSQL = True # 如果MySQL连接失败,是否继续使用SQLite(True=继续,False=抛出异常) CONTINUE_ON_MYSQL_ERROR = True ``` ### 4. 测试连接 启动程序后,系统会自动: - 连接SQLite数据库(本地) - 如果启用了MySQL,尝试连接MySQL数据库并创建表结构 如果MySQL连接失败,系统会: - 记录警告日志 - 如果 `CONTINUE_ON_MYSQL_ERROR = True`,继续使用SQLite,不影响程序运行 - 如果 `CONTINUE_ON_MYSQL_ERROR = False`,会抛出异常,程序可能无法启动 ## 配置示例 ### 示例1:本地MySQL ```python MYSQL_CONFIG = { 'host': 'localhost', 'port': 3306, 'user': 'root', 'password': '123456', 'database': 'dibang', 'charset': 'utf8mb4' } ``` ### 示例2:远程MySQL服务器 ```python MYSQL_CONFIG = { 'host': '192.168.1.100', 'port': 3306, 'user': 'dibang_user', 'password': 'your_password', 'database': 'dibang', 'charset': 'utf8mb4' } ``` ### 示例3:仅使用SQLite(禁用MySQL) ```python ENABLE_MYSQL = False ``` ## 注意事项 1. **首次运行**:程序会自动在MySQL数据库中创建所需的表结构 2. **数据同步**:所有插入、更新、删除操作都会同时写入两个数据库 3. **读取操作**:目前仍从SQLite读取数据(保持原有行为) 4. **连接失败**:如果MySQL连接失败,SQLite仍可正常工作,但数据只会保存在SQLite中 5. **ID不一致**:由于SQLite和MySQL各自维护自增ID,两边的ID可能不一致,但不影响功能 ## 故障排查 ### 问题1:无法连接MySQL **症状**:程序运行正常,但MySQL没有数据 **解决方法**: 1. 检查MySQL服务是否启动 2. 检查 `config.py` 中的连接信息是否正确 3. 检查MySQL用户权限是否足够 4. 检查防火墙是否开放3306端口 5. 查看程序日志中的警告信息 ### 问题2:MySQL连接时断时续 **解决方法**: - 系统会自动检测连接并重新连接 - 如果问题持续,检查网络连接或MySQL服务器状态 ### 问题3:不想使用MySQL **解决方法**: - 在 `config.py` 中设置 `ENABLE_MYSQL = False` - 系统将仅使用SQLite数据库 ## 数据库表结构 系统会在MySQL中创建以下表: - `weighing_slips` - 地磅单表 - `companies` - 公司名称表 - `cargos` - 货物名称表 - `purchase_plans` - 采购计划表 表结构会自动与SQLite保持一致。