MongodbClient.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # coding: utf-8
  2. """
  3. -------------------------------------------------
  4. File Name: MongodbClient.py
  5. Description : 封装mongodb操作
  6. Author : JHao netAir
  7. date: 2017/3/3
  8. -------------------------------------------------
  9. Change Activity:
  10. 2017/3/3:
  11. 2017/9/26:完成对mongodb的支持
  12. -------------------------------------------------
  13. """
  14. __author__ = 'Maps netAir'
  15. from pymongo import MongoClient
  16. class MongodbClient(object):
  17. def __init__(self, name, host, port):
  18. self.name = name
  19. self.client = MongoClient(host, port)
  20. self.db = self.client.proxy
  21. def changeTable(self, name):
  22. self.name = name
  23. def get(self, proxy):
  24. data = self.db[self.name].find_one({'proxy': proxy})
  25. return data['num'] if data != None else None
  26. def put(self, proxy, num=1):
  27. if self.db[self.name].find_one({'proxy': proxy}):
  28. return None
  29. else:
  30. self.db[self.name].insert({'proxy': proxy, 'num': num})
  31. def pop(self):
  32. data = list(self.db[self.name].aggregate([{'$sample': {'size': 1}}]))
  33. if data:
  34. data = data[0]
  35. value = data['proxy']
  36. self.delete(value)
  37. return {'proxy': value, 'value': data['num']}
  38. return None
  39. def delete(self, value):
  40. self.db[self.name].remove({'proxy': value})
  41. def getAll(self):
  42. return {p['proxy']: p['num'] for p in self.db[self.name].find()}
  43. def clean(self):
  44. self.client.drop_database('proxy')
  45. def delete_all(self):
  46. self.db[self.name].remove()
  47. def update(self, key, value):
  48. self.db[self.name].update({'proxy': key}, {'$inc': {'num': value}})
  49. def exists(self, key):
  50. return True if self.db[self.name].find_one({'proxy': key}) != None else False
  51. def getNumber(self):
  52. return self.db[self.name].count()
  53. if __name__ == "__main__":
  54. db = MongodbClient('first', 'localhost', 27017)
  55. # db.put('127.0.0.1:1')
  56. # db2 = MongodbClient('second', 'localhost', 27017)
  57. # db2.put('127.0.0.1:2')
  58. print(db.pop())