test.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import pandas as pd
  2. from pymongo import MongoClient
  3. from bson import ObjectId, json_util
  4. import json
  5. # 连接到 MongoDB
  6. client = MongoClient('172.20.45.129', 27002)
  7. db = client['data_quality']
  8. collection = db['standard_sample_data']
  9. def insert_without_escape(collection, record):
  10. """插入数据并确保引号不被转义"""
  11. try:
  12. # 1. 将 ObjectId 转为字符串(临时解决序列化问题)
  13. if '_id' in record and isinstance(record['_id'], ObjectId):
  14. record['_id'] = str(record['_id'])
  15. # 2. 手动处理引号(确保不被转义)
  16. if 'projectname' in record:
  17. record['projectname'] = record['projectname'].replace('\\"', '"')
  18. # 3. 使用 json_util 处理特殊类型
  19. record_json = json_util.dumps(record)
  20. record_for_db = json_util.loads(record_json)
  21. # 4. 还原 ObjectId
  22. if '_id' in record_for_db and isinstance(record['_id'], str):
  23. record_for_db['_id'] = ObjectId(record['_id'])
  24. # 5. 插入数据
  25. collection.replace_one(
  26. {"_id": record_for_db.get("_id", ObjectId())},
  27. record_for_db,
  28. upsert=True
  29. )
  30. return True
  31. except Exception as e:
  32. print(f"插入失败: {str(e)}")
  33. return False
  34. # 示例记录
  35. record = {
  36. "_id": ObjectId("6864eb6dd5d8e4081f7a6a79"),
  37. "projectname": '中职学校"物理、化学、生物探索实践工坊"实训室改造项目',
  38. "site": "甘肃省阳光招标采购平台",
  39. "budget": 138295.32
  40. }
  41. # 插入数据
  42. if insert_without_escape(collection, record):
  43. print("✅ 插入成功")
  44. # 验证存储结果"_id": object_id
  45. doc = collection.find_one({"_id": ObjectId(record["_id"])})
  46. print("MongoDB 实际存储内容:")
  47. print(doc["projectname"]) # 应输出:中职学校"物理、化学、生物探索实践工坊"实训室改造项目
  48. else:
  49. print("❌ 插入失败")