使用Python脚本对MongoDB数据库内插入数据
1、使用python创建项目MongoDB(名字随意),如下图:
2、在项目下创建DB.conf文件,把可配置的项写入到文件内,如下图:
数据库IP、数据库端口、数据库名字、集合名字(相当于MySQL的表名)、插入的数据、插入数据的条数及脚本共运行时间
3、创建mongoDB.py文件,如下图:
首先需要一个配置文件操作的类class Config()类,类下面有一个用来获取配置文件的绝对路径的方法def get_config_path(),并且有一个获取配置文件内参数值的def read_config()
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工具。