python查詢mongodb內數據

来源:http://www.cnblogs.com/wuhl-89/archive/2017/11/03/7776779.html
-Advertisement-
Play Games

初學者,寫的不好請指出。 #第一步以insertTime為條件查詢時間段內的數據 #第二部步可以選擇是否再以通話Id為條件篩選第一步所查詢出來的數據 #因為使用的是配置文件,所以首先在代碼當前目錄下創建一個配置文件,db.conf 代碼: ...


初學者,寫的不好請指出。

#第一步以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('按回車鍵結束...')

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • TensorFlow運行方式。載入數據、定義超參數,構建網路,訓練模型,評估模型、預測。 構造一個滿足一元二次函數y=ax^2+b原始數據,構建最簡單神經網路,包含輸入層、隱藏層、輸出層。TensorFlow學習隱藏層、輸出層weights、biases。觀察訓練次數增加,損失值變化。 生成、載入數 ...
  • decode的作用是將其他編碼的字元串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字元串str1轉換成unicode編碼。encode的作用是將unicode編碼轉換成其他編碼的字元串,如str2.encode('gb2312'),表示將unico ...
  • 一、幾種枚舉類代碼示例 1、最簡單枚舉類 2、一般枚舉類用法 二、枚舉類方法 1、values()方法,返回一個enum實例的數組,數組中元素嚴格保持其在enum中聲明時的順序 2、ordinal(),返回該enum實例在enum中聲明的次序(從0開始) 3、compareTo()方法,比較enum ...
  • 什麼是框架 ...
  • 1、整數轉二進位 2、搖骰子游戲 3、猜密碼 4、查詢天氣 首先創建city.py ...
  • 人生得意須盡歡,莫使金樽空對月。 先天下之憂而憂,後天下之樂而樂。 大東北的天氣已經漸入佳境了,在夜深人靜的時候,隨著滑鼠的移動,鍵盤清脆的聲音,開啟了今天的睡前代碼工程!今天聊聊JDBC版本的分頁,分頁功能在很多的web項目中都是必須的功能,然而分頁有真假分頁,假分頁,例如某某某網站,你懂得。什麼 ...
  • Spring簡介 網站: 複雜的Java EE項目用Spring才會得到優化,如果太簡單的項目用框架反而會變的麻煩。 ...
  • 背景 最近興趣使然寫了幾個Python庫,也發佈到了Pypi上,雖然沒什麼人下載,但自己在其他機器上用著也會很方便。這裡我向大家介紹一下如何在Pypi上發表自己的Python庫。 準備 註冊賬號 很顯然地要在Pypi上註冊一個賬號。 安裝必要的庫 setuptools 原則上安裝了pip的環境都有s ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...