继续迁移数据

This commit is contained in:
2025-07-21 08:05:51 +08:00
parent e3741ed9d4
commit 2e696cab87
13 changed files with 2798 additions and 479 deletions

View File

@@ -0,0 +1,118 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
作物数据MongoDB迁移脚本
作者: AI Assistant
功能: 将crop_data.json中的数据迁移到MongoDB
"""
import json
import sys
import os
from SMYMongoDBAPI import SMYMongoDBAPI
def migrate_crop_data():
"""迁移作物数据到MongoDB"""
print("=== 作物数据MongoDB迁移脚本 ===")
# 1. 连接MongoDB
print("\n1. 连接MongoDB...")
try:
api = SMYMongoDBAPI("mengyafarm") # 使用正式数据库
if not api.is_connected():
print("❌ MongoDB连接失败")
return False
print("✅ MongoDB连接成功")
except Exception as e:
print(f"❌ MongoDB连接异常: {e}")
return False
# 2. 从JSON文件加载作物数据
print("\n2. 从JSON文件加载作物数据...")
try:
with open("config/crop_data.json", 'r', encoding='utf-8') as file:
crop_data = json.load(file)
print(f"✅ JSON数据加载成功包含 {len(crop_data)} 种作物")
except Exception as e:
print(f"❌ 加载JSON文件失败: {e}")
return False
# 3. 检查MongoDB中是否已有数据
print("\n3. 检查MongoDB中的现有数据...")
try:
existing_data = api.get_crop_data_config()
if existing_data:
print(f"⚠️ MongoDB中已存在作物数据包含 {len(existing_data)} 种作物")
choice = input("是否要覆盖现有数据?(y/N): ").strip().lower()
if choice not in ['y', 'yes']:
print("取消迁移")
return False
else:
print("✅ MongoDB中暂无作物数据可以进行迁移")
except Exception as e:
print(f"❌ 检查MongoDB数据时异常: {e}")
return False
# 4. 迁移数据到MongoDB
print("\n4. 迁移数据到MongoDB...")
try:
success = api.update_crop_data_config(crop_data)
if success:
print("✅ 作物数据迁移成功")
else:
print("❌ 作物数据迁移失败")
return False
except Exception as e:
print(f"❌ 迁移数据时异常: {e}")
return False
# 5. 验证迁移结果
print("\n5. 验证迁移结果...")
try:
migrated_data = api.get_crop_data_config()
if migrated_data and len(migrated_data) == len(crop_data):
print(f"✅ 迁移验证成功MongoDB中包含 {len(migrated_data)} 种作物")
# 检查几个关键作物
test_crops = ["小麦", "胡萝卜", "苹果", "松露"]
print("\n验证关键作物数据:")
for crop_name in test_crops:
if crop_name in crop_data and crop_name in migrated_data:
original = crop_data[crop_name]
migrated = migrated_data[crop_name]
if original == migrated:
print(f"{crop_name}: 数据一致")
else:
print(f"⚠️ {crop_name}: 数据不一致")
else:
print(f"{crop_name}: 数据缺失")
else:
print("❌ 迁移验证失败")
return False
except Exception as e:
print(f"❌ 验证迁移结果时异常: {e}")
return False
print("\n=== 迁移完成 ===")
print("\n📋 迁移摘要:")
print(f" • 源文件: config/crop_data.json")
print(f" • 目标数据库: mengyafarm")
print(f" • 目标集合: gameconfig")
print(f" • 文档ID: 687cfb3d8e77ba00a7414bac")
print(f" • 迁移作物数量: {len(crop_data)}")
print("\n✅ 作物数据已成功迁移到MongoDB")
print("\n💡 提示: 服务器现在会优先从MongoDB加载作物数据如果MongoDB不可用会自动回退到JSON文件。")
return True
def main():
"""主函数"""
try:
migrate_crop_data()
except KeyboardInterrupt:
print("\n迁移被用户中断")
except Exception as e:
print(f"迁移过程中发生异常: {e}")
if __name__ == "__main__":
main()