使用Python腳本寫入MongoDB數據

使用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工具。測試

相關文章
相關標籤/搜索