python查询mongodb内数据

初学者,写的不好请指出。

#第一步以insertTime为条件查询时间段内的数据

#第二部步可以选择是否再以通话Id为条件筛选第一步所查询出来的数据

#因为使用的是配置文件,所以首先在代码当前目录下创建一个配置文件,db.conf

代码:

  1 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(‘按回车键结束...‘)
时间: 2024-10-28 19:40:21

python查询mongodb内数据的相关文章

python查询数据库返回数据

python查询数据库返回数据主要运用到flask框架,pymysql 和 json‘插件’ #!/usr/bin/python # -*- coding: UTF-8 -*- import pymysql import flask,json server=flask.Flask(__name__) @server.route('/index',methods=['get','post']) def create(): db = pymysql.connect("localhost",

[ES]Python查询ES导出数据为Excel

版本 elasticsearch==5.5.0 python==3.7 说明 用python查询es上存储的状态数据,将查询到的数据用pandas处理成excel code # -*- coding: utf-8 -*- # @Time : 2019/7/22 10:41 # @Author : Skyell Wang # @FileName: es_data_get.py from elasticsearch import Elasticsearch import pandas as pd i

在zepplin 使用spark sql 查询mongodb的数据

1.下载zepplin 进入官网下载地址,下载完整tar包. 2.解压 tar zxvf zeppelin-0.7.3.tgz 3.修改配置 新建配置文件 cp zeppelin-env.sh.template zeppelin-env.sh 修改配置文件 vi zeppelin-env.sh # 设置java home 路径 export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/jre # 设

python利用mongodb上传图片数据 : GridFS 与 bson两种方式

利用mongodb保存图片通常有两种方法,一种是将图片数据转化为二进制作为字典的键值对进行保存,另一种是利用mongodb提供的GridFS进行保存,两者各有利弊.性能方面的优劣未曾测试,无法进行评价,此处仅对两种方式进行介绍,若有彻知者还望指教. 下面以如下数据作为示例进行介绍: 数据示例 dic = { "owner_name" : "samssmilin", "photo_id" : "602880671", "

SQL Server 查询时间段内数据

方式一: ALTER Proc [dbo].[usp_Rpt_AcctTypeAudit] @FromDate datetime=null, -- yyyy-mm-dd (may change in the future!) @ToDate datetime=null, -- yyyy-mm-dd (may change in the future!) @UserID nvarchar(50) = 'ALL' as BEGIN set nocount on if @ToDate is not n

Python札记 -- MongoDB模糊查询

最近在使用MongoDB的时候,遇到了使用多个关键词进行模糊查询的场景.竹风使用的是mongoengine库. 查了各种资料,最后总结出比较好用的方法.先上代码,后面进行详细说明.如下: 1 #!/usr/bin/env python 2 #coding:utf-8 3 4 import re 5 import mongoengine 6 from mongoengine import * 7 8 mongoengine.register_connection('default', 'test'

python操作MONGODB数据库,提取部分数据再存储

目标:从一个数据库中提取几个集合中的部分数据,组合起来一共一万条.几个集合,不足一千条数据的集合就全部提取,够一千条的就用一万减去不足一千的,再除以大于一千的集合个数,得到的值即为所需提取文档的个数.从每个集合中提取的数据存放到新的对应集合中,新集合名称为原先集合加"_col". 用到相关技术点: 操作MONGODB: 先通过IP和端口号连接到MONGODB所在的机器,得到一个MONGODB客户端对象,然后认证某个数据库的账号密码连接到该数据库,得到一个该数据库的对象.一个数据库下有很

python 连接数据库,查询结果写入数据到excel

使用Python链接数据库查询数据,并将查询结果写入到Excel中,实现方法上主要有两步,第一,查数据,第二,写Excel. 一.导入需要的包 import time import xlwt from commontool import dbtool import os 二.查数据,并返回查询结果 查询数据传入指定日期,使用指定日期在数据库中查询该日期区间的交易.因为传入的日期为字符串,第一步需要将传入的字符串转换成时间数组,第二步再将传入的日期转换成自己想要的时间格式. class write

MySQL 查询时间段内的数据

先来建表语句: SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for t_user -- ---------------------------- DROP TABLE IF EXISTS `t_user`; CREATE TABLE `t_user` ( `userId` bigint(20) NOT NULL, `fullName` varchar(64) NOT NULL, `use