mogodb_helper.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. # coding:utf-8
  2. from pymongo import MongoClient
  3. from pymongo.errors import AutoReconnect
  4. from bson import ObjectId
  5. import time
  6. import urllib.parse as parse
  7. class MongoDBInterface:
  8. def __init__(self, config):
  9. self.__host = config.get("ip_port", "")
  10. self.__user = config.get("user", "")
  11. self.__password = config.get("password", "")
  12. self.__database = config.get("db", "")
  13. self.connect()
  14. def connect(self):
  15. """
  16. 连接数据库
  17. :return:
  18. """
  19. # 特殊符号转义
  20. self.__user = parse.quote_plus(self.__user)
  21. self.__password = parse.quote_plus(self.__password)
  22. # 连接数据库
  23. try:
  24. if self.__user:
  25. self.client = MongoClient(
  26. "mongodb://{}:{}@{}".format(self.__user, self.__password, self.__host),
  27. unicode_decode_error_handler='ignore')
  28. else:
  29. self.client = MongoClient("mongodb://{}".format(self.__host), unicode_decode_error_handler='ignore')
  30. self.db = self.client[self.__database]
  31. except AutoReconnect as e:
  32. self.connect()
  33. def disconnect(self):
  34. self.client.close()
  35. def find_by_id(self, collection_name, m_id):
  36. try:
  37. collection = self.db[collection_name]
  38. if isinstance(m_id, str):
  39. m_id = ObjectId(m_id)
  40. documents = collection.find_one({"_id": m_id})
  41. return documents
  42. except AutoReconnect:
  43. time.sleep(5)
  44. print("Connection to MongoDB lost. Reconnecting...")
  45. self.connect() # 自动重连
  46. return self.find_by_id(collection_name, m_id)
  47. def update_by_id(self, collection_name, m_id, fields: dict):
  48. try:
  49. collection = self.db[collection_name]
  50. if isinstance(m_id, str):
  51. m_id = ObjectId(m_id)
  52. documents = collection.update_one({"_id": m_id}, {"$set": fields})
  53. return documents
  54. except AutoReconnect:
  55. print("Connection to MongoDB lost. Reconnecting...")
  56. self.connect() # 自动重连
  57. return self.update_by_id(collection_name, m_id, fields)
  58. def find_relus(self, collection_name, hash_id):
  59. collection = self.db[collection_name]
  60. row = collection.find_one({"hash_id": hash_id})
  61. return row
  62. def find_rule_by_company(self, collection_name, company, version):
  63. collection = self.db[collection_name]
  64. row = collection.find_one({"company_name": company, "version": version})
  65. if not row:
  66. return None
  67. return row.get("rules_id")