mongo_helper.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. # coding:utf-8
  2. """
  3. mongodb 数据库连接文件
  4. """
  5. from pymongo import MongoClient
  6. import urllib.parse as parse
  7. from loguru import logger
  8. from pymongo.errors import CursorNotFound
  9. class MongoConnect(object):
  10. def __init__(self, config):
  11. self.__host = config.get("host", "")
  12. self.__user = config.get("user", "")
  13. self.__password = config.get("password", "")
  14. self.__database = config.get("db", "")
  15. self.__col = config.get("col", "")
  16. self.__charset = config.get("charset", "")
  17. self.client, self.col = self.connect()
  18. def connect(self):
  19. """
  20. 连接数据库
  21. :return:
  22. """
  23. # 特殊符号转义
  24. self.__user = parse.quote_plus(self.__user)
  25. self.__password = parse.quote_plus(self.__password)
  26. # 连接数据库
  27. if self.__user:
  28. client = MongoClient(
  29. "mongodb://{}:{}@{}".format(self.__user, self.__password, self.__host),
  30. unicode_decode_error_handler='ignore')
  31. else:
  32. client = MongoClient(
  33. "mongodb://{}".format(self.__host),
  34. unicode_decode_error_handler='ignore')
  35. col = client[self.__database][self.__col]
  36. return client, col
  37. def get_by_mid(self, m_id, fields):
  38. info = {}
  39. for i in range(2):
  40. try:
  41. info = self.col.find_one({"_id": m_id}, fields)
  42. break
  43. except CursorNotFound as e:
  44. logger.warning(e)
  45. self.client, self.col = self.connect()
  46. return info
  47. def insert(self, row):
  48. info = {}
  49. for i in range(2):
  50. try:
  51. info = self.col.insert_one(row)
  52. break
  53. except CursorNotFound as e:
  54. logger.warning(e)
  55. self.client, self.col = self.connect()
  56. return info
  57. def update(self, m_id, row):
  58. info = {}
  59. for i in range(2):
  60. try:
  61. info = self.col.update_one({"_id": m_id}, {"$set": row})
  62. break
  63. except CursorNotFound as e:
  64. logger.warning(e)
  65. self.client, self.col = self.connect()
  66. return info