python數據庫開發(fā)之MongoDB安裝及Python3操作MongoDB數據庫詳細方法與實例
MongoDB簡介
MongoDB 是由C++語言編寫的,是一個基于分布式文件存儲的開源數據庫系統。
在高負載的情況下,添加更多的節(jié)點,可以保證服務器性能。
MongoDB 旨在為WEB應用提供可擴展的高性能數據存儲解決方案。
MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔類似于 JSON 對象。字段值可以包含其他文檔,數組及文檔數組。
MongoDB應用場景
- 大而復雜的數據
- 移動和社會基礎設施數據
- 內容管理和交付
- 用戶數據
- 管理數據中心
MongoDB優(yōu)點
- MongoDB 的架構較少。它是一個文檔數據庫,它的一個集合持有不同的文檔。
- 從一個到另一個的文檔的數量,內容和大小可能有差異。
- MongoDB 中單個對象的結構很清淅。
- MongoDB 中沒有復雜的連接。
- MongoDB 提供深度查詢的功能,因為它支持對文檔的強大的動態(tài)查詢。
- MongoDB 很容易擴展。
- 它使用內部存儲器來存儲工作集,這是其快速訪問的原因。
MongoDB缺點
- 不支持事務操作
- 占用空間過大
- MongoDB沒有如MySQL那樣成熟的維護工具
- 無法進行關聯表查詢,不適用于關系多的數據
- 復雜聚合操作通過mapreduce創(chuàng)建,速度慢
- 模式自由, 自由靈活的文件存儲格式帶來的數據錯誤
CentOSP安裝MongoDB
下載安裝MongoDB
下載 3.0.6 版本
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz
安裝
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz
移動文件夾
mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb
增加環(huán)境變量
export PATH=/usr/local/mongodb/bin:$PATH
啟動MongoDB
nohup /usr/local/mongodb/bin/mongod --dbpath=/data/db --rest > /usr/local/mongodb/mongo.log 2>&1 &
查看是否啟動
netstat -tnlp|grep mongo
端口
27017是默認開的mongodb端口,28017是默認的web訪問端口
效果
如果開了外網端口,用瀏覽器查看是否外網訪問
MongoDB常用命令
連接mongoDB
/usr/local/mongodb/bin/mongo
效果
顯示數據庫列表
show dbs
效果
顯示表單(集合)列表
# 切換分支 use mongodb_test # 顯示列表 show tables # 顯示列表 show collections
show tables 和 show collections 效果相同
效果
查詢集合所有數據
db.col_test.find()
效果
Python3連接操作MongoDB
安裝PyMongo
pip install pymongo
注意事項
注意,如果創(chuàng)建的數據庫、表單中沒有數據,是顯示不出來數據庫的。
顯示數據庫列表
from pymongo import MongoClient client_ip = "193.112.61.11" client_port = 27017 my_client = MongoClient(client_ip, client_port) db_list = my_client.list_database_names() print("數據庫列表:",db_list)
連接測試
db = my_client.test print("db:", db) testDB(my_client)
db_name = 'mongodb_test' my_db = my_client[db_name]
表單(集合)列表
col_list = my_db.list_collection_names()
沒有此表單就創(chuàng)建這個表單,有此表單就連接這個表單
sheet_tab_one = my_db[name]
Python3增刪改查MongoDB數據
增加一條數據
# 刪除一條數據 def delData_one(my_col, myquery): result = my_col.delete_one(myquery) print(result.deleted_count,"數據已刪除")
增加多條數據
# 刪除多條數據 def delData_many(my_col, myquery): result = my_col.delete_many(myquery) print(result.deleted_count,"數據已刪除")
刪除數據
# 刪除一條數據 def delData_one(my_col, myquery): result = my_col.delete_one(myquery) print(result.deleted_count,"數據已刪除")
刪除多條數據
# 刪除多條數據 def delData_many(my_col, myquery): result = my_col.delete_many(myquery) print(result.deleted_count,"數據已刪除")
刪除一個表單
# 刪除一個表單 def delCol(my_col): my_col.drop() print("刪除表單成功")
更新數據
# 修改匹配到的第一條數據 def updateData_one(my_col, myquery, new_val): result = my_col.update_one(myquery, new_val) print(result.modified_count, "文檔已修改")
# 修改匹配到的多條數據 def updateData_many(my_col, myquery, new_val): result = my_col.update_many(myquery, new_val) print(result.modified_count, "文檔已修改")
查詢數據
# 查詢一條數據 def searchData_one(my_col): result = my_col.find_one() print(result)
# 查詢集合中所有數據 def searchData_many(my_col, limit = 0): for item in my_col.find().limit(limit): print(item)
根據指定條件查詢 或者 正則表達式查詢
# my_query = {"name": "ShaShiDi"} # 根據指定條件查詢 # my_query = {"name": {"$regex": "^S"}} # 以下實例用于讀取 name 字段中第一個字母為 "S" 的數據 # 根據指定條件查詢 或者正則表達式查詢(比如 my_query = { "name": { "$regex": "^S" } }) def searchData_miss(my_col, my_query): print("根據指定條件查詢: ", my_query) my_doc = my_col.find(my_query) for item in my_doc: print(item)
排序數據
# 按照某字段排序 默認True是正序,False是倒序 def sortData(my_col, my_key, sortB = True): if sortB: my_doc = my_col.find().sort(my_key) else: my_doc = my_col.find().sort(my_key, -1) for item in my_doc: print(item)
Python3操作MongoDB完整源碼
from pymongo import MongoClient # 數據庫列表 def ifnotDB(my_client, db_name): db_list = my_client.list_database_names() print("數據庫列表:",db_list) if db_name in db_list: print("%s 數據庫已存在!"%db_name) else: print("%s 數據庫不存在!"%db_name) # 測試數據庫是否連接成功 返回測試結果 def testDB(my_client): db = my_client.test print("db:", db) return db # 創(chuàng)建一個數據庫 返回數據庫對象 def creatDB(my_client, name): my_db = my_client[name] ifnotDB(my_client, name) return my_db # 表單列表 def ifnotCol(my_db, col_name): col_list = my_db.list_collection_names() if col_name in col_list: print("%s 集合已存在!"%col_name) else: print("%s 集合不存在!"%col_name) # 創(chuàng)建一個表單 返回表單對象 def creatCol(my_db, name): sheet_tab_one = my_db[name] ifnotCol(my_db, name) return sheet_tab_one # 增加一條數據 返回_id def addData_one(my_col, my_json): result = my_col.insert_one(my_json) print(result.inserted_id,"增加一條數據")# 返回 _id 字段 return result.inserted_id # 增加多條數據 返回所有文檔對應的 _id 值 def addData_many(my_col, my_jsons): result = my_col.insert_many(my_jsons) print(result.inserted_ids) return result.inserted_ids # 刪除一條數據 def delData_one(my_col, myquery): result = my_col.delete_one(myquery) print(result.deleted_count,"數據已刪除") # 刪除多條數據 def delData_many(my_col, myquery): result = my_col.delete_many(myquery) print(result.deleted_count,"數據已刪除") # 刪除一個表單 def delCol(my_col): my_col.drop() print("刪除表單成功") # 修改匹配到的第一條數據 def updateData_one(my_col, myquery, new_val): result = my_col.update_one(myquery, new_val) print(result.modified_count, "文檔已修改") # 修改匹配到的多條數據 def updateData_many(my_col, myquery, new_val): result = my_col.update_many(myquery, new_val) print(result.modified_count, "文檔已修改") # 按照某字段排序 默認True是正序,False是倒序 def sortData(my_col, my_key, sortB = True): if sortB: my_doc = my_col.find().sort(my_key) else: my_doc = my_col.find().sort(my_key, -1) for item in my_doc: print(item) # 查詢一條數據 def searchData_one(my_col): result = my_col.find_one() print(result) # 查詢集合中所有數據 def searchData_many(my_col, limit = 0): for item in my_col.find().limit(limit): print(item) # 根據指定條件查詢 或者正則表達式查詢(比如 my_query = { "name": { "$regex": "^S" } }) def searchData_miss(my_col, my_query): print("根據指定條件查詢: ", my_query) my_doc = my_col.find(my_query) for item in my_doc: print(item) if __name__ == "__main__": client_ip = "服務器IP地址" client_port = 27017 db_name = 'mongodb_test' col_name = 'col_test' my_json = {"name": "ShaShiDi", "url": "https://shazhenyu.blog.csdn.net/"} # 可以指定_id 我們也可以自己指定 id,插入 my_jsons = [{"_id": 1,"name": "sha", "url": "https://www.shazhenyu.com"},{"_id": 2,"name": "sha2", "url": "https://shazhenyu.com"}] my_query = {"name": "ShaShiDi"} my_query_regex = {"name": {"$regex": "^S"}} # 以下實例用于讀取 name 字段中第一個字母為 "S" 的數據 my_key = "_id" new_values = {"$set": {"name": "ShaShiDi_new"}} my_client = MongoClient(client_ip, client_port) testDB(my_client) my_db = creatDB(my_client,db_name) my_col = creatCol(my_db,col_name) # # 增加一條數據 # addData_one(my_col, my_json) # # 增加多條數據 # addData_many(my_col, my_jsons) # # 刪除一個符合條件的集合 # delData_one(my_col, my_query) # # 刪除所有符合條件的集合 # delData_many(my_col, my_query) # # 刪除該集合中的所有文檔 # delData_many(my_col, {}) # # 刪除表單 # delCol(my_col) # # 修改第一個匹配到的文檔 # updateData_one(my_col, my_query, new_values) # # 修改所有符合條件的文檔 # updateData_many(my_col, my_query, new_values) # # 按照某字段排序 默認True是正序,False是倒序 # sortData(my_col, my_key) # # 根據指定條件查詢 # searchData_miss(my_col, my_query) # # 根據正則表達式查詢 # searchData_miss(my_col, my_query_regex) # # 查詢集合中所有數據 如果寫第二個參數,就是指定條數記錄查詢 # # searchData_many(my_col) # searchData_many(my_col,2)
本文主要講解了MongoDB安裝及Python3操作MongoDB數據庫詳細方法與實例,更多關于Python3操作MongoDB數據庫的技巧請查看下面的相關鏈接
相關文章
python在openstreetmap地圖上繪制路線圖的實現
這篇文章主要介紹了python在openstreetmap地圖上繪制路線圖的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07