python查询mongodb内数据
时间:2021-07-01 10:21:17
帮助过:7人阅读
import configparser
2 import pymongo
3 from pymongo
import MongoClient
4 import time
5
6 print(
‘以insertTime为条件查询;可以按通话id筛选数据‘)
7 count =
0
8 f = open(
‘获取数据.txt‘,
‘w‘,encoding=
‘utf-8‘)
#在写入文件夹是会报编码格式错误,所以增加encoding=‘utf-8‘解决
9 cf =
configparser.ConfigParser()
10 #读取当前目录下的配置文件db.conf
11 cf.read(
‘db.conf‘)
12 get_start_time = cf.getint(
‘mongodb‘,
‘start_time‘)
13 get_end_time = cf.getint(
‘mongodb‘,
‘end_time‘)
14 get_call_id = cf.get(
‘mongodb‘,
‘call_id‘)
15 #将时间戳毫秒转换为秒,db内的时间戳为毫秒单位,python的time为秒单位,所以除以1000
16 s_local_time = time.localtime(get_start_time/1000
)
17 e_local_time = time.localtime(get_end_time/1000
)
18 #将秒转换为日期格式2017-01-01 12:00:00
19 s_time = time.strftime(
‘%Y-%m-%d %H:%M:%S‘,s_local_time)
20 e_time = time.strftime(
‘%Y-%m-%d %H:%M:%S‘,e_local_time)
21
22 print(
‘数据库IP:‘,cf.get(
‘mongodb‘,
‘db_ip‘),
‘\n数据库Port:‘,cf.getint(
‘mongodb‘,
‘db_port‘))
23 print(
‘查询开始时间:‘,s_time,
‘\n查询结束时间:‘,e_time)
24 print(
‘通话ID:‘,get_call_id)
25 client = MongoClient(cf.get(
‘mongodb‘,
‘db_ip‘),cf.getint(
‘mongodb‘,
‘db_port‘))
26 print(
‘****************************************************‘)
27
28 #异常处理,连接失败走except pymongo.errors.ServerSelectionTimeoutError并退出,成功走else路径。
29 try:
30 print(
‘正在连接...‘)
31 client.database_names()
#检查是否能获取到数据库列表,获取不到说明连接失败。
32 print(
‘连接成功...‘)
33 print(
‘****************************************************‘)
34 except pymongo.errors.ServerSelectionTimeoutError:
35 print(
‘无法连接,请查看数据库是否启成功,或数据库IP和Port是否配置正确。‘)
36 print(
‘****************************************************‘)
37 else:
38 # 输出数据库列表,循环输出
39 print(
‘数据库名称列表:‘)
40 database_names_num = 1
#为数据库编号,从1开始,循环一次+1
41 for d_list
in client.database_names():
42 print(database_names_num,
‘:‘,d_list)
43 database_names_num += 1
44 print(
‘****************************************************‘)
45 while True:
46 #异常处理,如输入非整数走下一步except ValueError,重新开始循环。否则走else路径。
47 try:
48 num_1 = int(input(
‘请以编号选择数据库:‘))
49 except ValueError:
50 print(
‘输入类型错误,请重新输入。‘)
51 print(
‘****************************************************‘)
52 else :
53 #判断输入的编号是否大于数据库的数量,或小于1
54 if num_1 > len(client.database_names())
or num_1 < 1
:
55 print(
‘没有找到这个数据库,请重新输入。‘)
56 print(
‘****************************************************‘)
57 else:
58 #因数据库实际全部存在为一个列表内,索引从0开始,我们为数据库设置的编号为从1开始,所以需要-1
59 db = client[client.database_names()[num_1-1]]
#数据库名称
60 print(
‘****************************************************‘)
61 #print(db)
62
63 #列出数据库内集合列表,循环输出
64 print(
‘数据库内集合列表:‘)
65 collection_names_num = 1
#为集合编号,从1开始,循环一次+1
66 for c_list
in db.collection_names():
67 print(collection_names_num,
‘:‘,c_list )
68 collection_names_num += 1
69 print(
‘****************************************************‘)
70
71 while True:
72 # 异常处理,如输入非整数走下一步except ValueError,重新开始循环。否则走else路径。
73 try:
74 num_2 = int(input(
‘请以编号选择数据库集合:‘))
75 print(
‘****************************************************‘)
76 except ValueError:
77 print(
‘输入类型错误,请重新输入。‘)
78 print(
‘****************************************************‘)
79 else:
80 # 判断输入的编号是否大于数据库内集合的数量,或小于1
81 if num_2 > int(len(db.collection_names()))
or num_2 < 1
:
82 print(
‘没有找到这个集合,请重新输入。‘)
83 print(
‘****************************************************‘)
84 #print(db.collection_names())
85 else:
86 # 因数据库集合实际全部存在为一个列表内,索引从0开始,我们为数据库集合设置的编号为从1开始,所以需要-1
87 my_db = db[db.collection_names()[num_2-1
]]
88 #print(my_db)
89 n = input(
‘是否需要筛选通话id,输入“Y”或“N”:‘)
90 print(
‘****************************************************‘)
91 print(
‘开始运行...‘)
92
93 #这个循环分为3条路径,输入n,y个一条,然后输入别的任何字符走else路径,并重新循环
94 while True:
95 if n ==
‘n‘ or n ==
‘N‘:
96 s__time = time.clock()
# 本地开始查询时间
97 #find查询条件,循环遍历集合,查询到符合条件的数据存到变量data
98 for data
in my_db.find({
"insertTime": {
‘$gte‘: get_start_time,
‘$lte‘: get_end_time}}):
99 #print(data)
100 f.write(str(data) +
‘\n‘)
#写入文件内
101 count += 1
#统计共输出数据的条数,初始为0,循环一次+1
102 e__time = time.clock()
#本地结束查询时间
103 #耗时等于结束时间减去开始时间
104 print(
‘运行结束,共查询到‘, count,
‘条数据,共耗时‘,int(e__time - s__time),
‘秒。‘)
105 break
106
107 elif n ==
‘y‘ or n ==
‘Y‘:
108 # 开始运行时间
109 s__time = time.clock()
# 本地开始查询时间
110 # find查询条件,循环遍历集合,查询到符合条件的数据存到变量data
111 for data
in my_db.find({
"insertTime": {
‘$gte‘: get_start_time,
‘$lte‘: get_end_time}}):
112 #k为key,v为value,循环遍历data,查询value内含有通话ID的数据写入到文件
113 for k, v
in data.items():
114 if get_call_id
in str(v):
115 #print(data)
116 f.write(str(data) +
‘\n‘)
117 count += 1
#统计共输出数据的条数,初始为0,循环一次+1
118 e__time = time.clock()
#本地结束查询时间
119 # 耗时等于结束时间减去开始时间
120 print(
‘运行结束,共查询到‘, count,
‘条数据,共耗时‘, int(e__time - s__time),
‘秒。‘)
121 break
122 break
123 break
124 input(
‘按回车键结束...‘)
python查询mongodb内数据
标签:数据库 读取 写入 errors 日期格 通话 _id 查询条件 logs