python读取mongodb数据_python查询mongodb内数据

1 importconfigparser2 importpymongo3 from pymongo importMongoClient4 importtime5

6 print(‘以insertTime为条件查询;可以按通话id筛选数据‘)7 count =08 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 exceptpymongo.errors.ServerSelectionTimeoutError:35 print(‘无法连接,请查看数据库是否启成功,或数据库IP和Port是否配置正确。‘)36 print(‘****************************************************‘)37 else:38 #输出数据库列表,循环输出

39 print(‘数据库名称列表:‘)40 database_names_num = 1 #为数据库编号,从1开始,循环一次+1

41 for d_list inclient.database_names():42 print(database_names_num,‘:‘,d_list)43 database_names_num += 1

44 print(‘****************************************************‘)45 whileTrue:46 #异常处理,如输入非整数走下一步except ValueError,重新开始循环。否则走else路径。

47 try:48 num_1 = int(input(‘请以编号选择数据库:‘))49 exceptValueError: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 indb.collection_names():67 print(collection_names_num, ‘:‘,c_list )68 collection_names_num += 1

69 print(‘****************************************************‘)70

71 whileTrue:72 #异常处理,如输入非整数走下一步except ValueError,重新开始循环。否则走else路径。

73 try:74 num_2 = int(input(‘请以编号选择数据库集合:‘))75 print(‘****************************************************‘)76 exceptValueError: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 whileTrue: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 indata.items():114 if get_call_id instr(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数据_python查询mongodb内数据)