继续迁移数据
This commit is contained in:
118
Server/migrate_crop_data_to_mongodb.py
Normal file
118
Server/migrate_crop_data_to_mongodb.py
Normal 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()
|
||||
Reference in New Issue
Block a user