使用Python腳本對MongoDB數據庫內插入數據
一、使用python建立項目MongoDB(名字隨意),以下圖:
二、在項目下建立DB.conf文件,把可配置的項寫入到文件內,以下圖:
數據庫IP、數據庫端口、數據庫名字、集合名字(至關於MySQL的表名)、插入的數據、插入數據的條數及腳本共運行時間python
三、建立mongoDB.py文件,以下圖:
首先須要一個配置文件操做的類class Config()類,類下面有一個用來獲取配置文件的絕對路徑的方法def get_config_path(),而且有一個獲取配置文件內參數值的def read_config()數據庫
其次須要一個操做MongoDB的類class MongoDB(),類下面有個初始化方法def __init__(),還有個用來鏈接數據庫的方法def connecting(),還有一個以插入總條數來運行的方法def start_insert_num()與 以配置運行時間來運行的方法def start_insert_time()多線程
1 # @File : mongoDB_Insert.py 2 # @Time : 2018/12/13 10:28 3 import os,time,configparser 4 from pymongo import MongoClient 5 6 class MongoDB(): 7 8 def __init__(self): 9 ''' 10 初始化操做 11 :param host:MongoDB Ip 12 :param port: MongoDB Port 13 :param db_name: MongoDB Name 14 :param collection: MongoDB Collection Name 15 ''' 16 self.conf_path = Config().get_config_path() 17 self.host = Config().read_config(self.conf_path,"MONGODB_CONF","host") 18 self.port = int(Config().read_config(self.conf_path,"MONGODB_CONF","port")) 19 self.db_name = Config().read_config(self.conf_path,"MONGODB_CONF","db_name") 20 self.collection = Config().read_config(self.conf_path,"MONGODB_CONF","collection_name") 21 self.insert_data = Config().read_config(self.conf_path,"INSERT_DATA","insert_data") 22 self.insert_num =int((Config().read_config(self.conf_path,"INSERT_NUM","insert_num"))) 23 self.insert_time =int((Config().read_config(self.conf_path,"INSERT_TIME","insert_time"))) 24 25 def connecting(self): 26 ''' 27 DB鏈接 28 :return: my_collection 29 ''' 30 try: 31 conn = MongoClient(host=self.host,port=self.port) 32 my_db = conn[self.db_name] 33 my_collection = my_db[self.collection] 34 return my_collection 35 except Exception as e: 36 print('鏈接失敗!錯誤緣由:{}'.format(e)) 37 raise e 38 39 def start_insert_num(self): 40 ''' 41 插入數據,配置共插入多少數據 42 :return:None 43 ''' 44 my_set = self.connecting() 45 try: 46 i = 0 47 start_time = int(time.time() * 1000) 48 while True: 49 my_set.insert((eval((self.insert_data)))) 50 i += 1 51 print('插入{}條數據。'.format(i)) 52 if i == self.insert_num: 53 break 54 end_time = int(time.time() * 1000) 55 print('插入數據成功。共插入{}條數據,耗時{}ms。'.format(self.insert_num,end_time - start_time)) 56 input('按回車鍵結束程序......') 57 except Exception as e: 58 print('插入數據失敗!失敗緣由:{}'.format(e)) 59 raise e 60 61 def start_insert_time(self): 62 ''' 63 插入數據,配置共運行時間 64 :return:None 65 ''' 66 my_set = self.connecting() 67 try: 68 i = 0 69 start_time = int(time.time() * 1000) 70 while True: 71 my_set.insert((eval((self.insert_data)))) 72 i += 1 73 print('插入{}條數據。'.format(i)) 74 if int(time.time()*1000) >= (start_time+self.insert_time): 75 break 76 print('插入數據成功。共插入{}條數據,耗時{}ms。'.format(i,self.insert_time)) 77 input('按回車鍵結束程序......') 78 except Exception as e: 79 print('插入數據失敗!失敗緣由:{}'.format(e)) 80 raise e 81 82 class Config(): 83 ''' 84 讀取配置文件類 85 ''' 86 87 def get_config_path(self): 88 ''' 89 獲取配置文件的絕對路徑 90 :return: 配置文件的絕對路徑 91 ''' 92 try: 93 conf_path = os.path.split(os.path.realpath(__file__))[0] + r"\DB.conf" 94 return conf_path 95 except Exception as e: 96 print('出錯啦!!!錯誤緣由:{}'.format(e)) 97 raise e 98 99 def read_config(self,conf_path,section,option): 100 ''' 101 讀取配置文件 102 :param conf_path:配置文件絕對路徑 103 :param section: 104 :param option: 105 :return: 配置文件內的value 106 ''' 107 try: 108 cf = configparser.ConfigParser() 109 cf.read(conf_path) 110 value = cf.get(section=section, option=option) 111 return value 112 except Exception as e: 113 print('讀取配置文件失敗!失敗緣由:{}'.format(e)) 114 raise e 115 116 if __name__ == '__main__': 117 #兩種不一樣的運行方式 118 #MongoDB().start_insert_num() 119 MongoDB().start_insert_time()
每一個人的代碼寫法不同,有的喜歡寫到一個類裏面,有的喜歡分爲多個模塊寫,有的喜歡分爲多個類寫,看我的喜愛吧,只要能實現功能就能夠了;工具
暫時不會多線程,因此致使插入數據庫數據很慢,個人解決辦法是把代碼編譯爲.exe可執行程序,而後多啓動幾個進程,雖然仍是很慢,可是比較以前強不少;性能
這個只是單純寫着玩兒,若是你們要是測試數據庫讀、寫性能的話建議使用YCSB工具。測試