<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
pymongo: MongoDB 官方提供的 Python 工具包。官方檔案: https://pymongo.readthedocs.io/en/stable/ pip安裝,命令如下:
pip install pymongo
管理 MongoDB 的主要步驟如下:
第一步,連線 MongoDB:
# 方式一: 使用預設的設定 client = MongoClient() # 方式二: 指定主機地址和埠號 client = MongoClient('localhost', 27017) # 方式三: 使用URI連線引數 client = MongoClient('mongodb://localhost:27017/')
第二步,管理資料庫:
#通過MongoClient物件來管理多個資料庫獲取資料庫(邏輯庫)物件 db = client.DATABASE_NAME db = client["DATABASE_NAME"] db = client.get_database(name=None, *args) # 檢視所有的資料庫(邏輯庫) client.list_databases() # 刪除資料庫(邏輯庫) client.drop_database(name_or_database, *args)
第三步,管理集合
# 通過資料庫物件db來管理集合 # 獲取集合物件 db = client.DATABASE_NAME db.COLLECTION_NAME client.DATABASE_NAME.COLLECTION_NAME db.get_collection(name, *args) # 檢視當前資料庫下的集合列表 db.list_collection_names() # 刪除集合 db.drop_collection(name_or_collection, *args)
基礎操作範例:
# -*- coding: utf-8 -*- # @Time : 2023-03-17 1:47 # @Author : AmoXiang # @File : 1.資料庫連線.py # @Software: PyCharm # @Blog : https://blog.csdn.net/xw1680 from pymongo import MongoClient # 使用預設設定連線到資料庫 # client = MongoClient() # print(client) # client.close() # 指定主機地址和埠號連線到資料庫 # client = MongoClient('localhost', 27017) # 使用URI連線引數連線到資料庫 client = MongoClient('mongodb://localhost:27017/') print(client) # client.close() # # # 存取資料庫 # db = client.test # db = client["test"] # print(db) # db = client.get_database('test') # client.close() # print(db) # # 檢視有哪些資料庫 db_list = client.list_databases() # # db_list = client.list_database_names() for item in db_list: print(item) # # 檢視資料庫下有哪些集合 db_test = client["test"] for item in db_test.list_collection_names(): print(item) # # # 集合物件操作 # data = db_test.students.find_one() # data = client.test.students.find_one() data = client.test.get_collection('students').find_one() print(data)
說明:pymongo 在插入資料時可以將 python 的物件轉換成 BSON
insert_one():插入一個檔案
# 呼叫方法 result = db.COLLECTION_NAME.insert_one(doc) # 返回插入的檔案ID result.inserted _id
insert_many():批次新增檔案。呼叫方法:
doc_list = [doc1,doc2] result = db.COLLECTION_NAME.insert_many(doc_list)
範例:
pymongo 可以將查詢的結果轉換成 python 中的物件
常用方法:
find_one(): 按條件查詢一個檔案 find(): 按條件查詢多個檔案 count_documents(): 統計滿足條件的檔案總數 aggregate(): 聚合統計 .sort(): 排序 .skip().limit(): 分頁
範例程式碼:
# -*- coding: utf-8 -*- # @Time : 2023-03-18 15:03 # @Author : AmoXiang # @File : 5.查詢檔案.py # @Software: PyCharm # @Blog : https://blog.csdn.net/xw1680 from bson.objectid import ObjectId from pymongo import MongoClient, ASCENDING, DESCENDING class LearnMongoDBSearch(object): """ MongoDB查詢練習 """ def __init__(self): self.client = MongoClient() def search_one(self): """ 查詢一個檔案 """ temp_obj = self.client.test.newdb.find_one() print(temp_obj) print('喜歡分數:', temp_obj['likes']) # print('註冊時間:', temp_obj['reg_date'].date()) print('姓名:', temp_obj['uname']) def search_user_by_pk(self, pk): obj_id = ObjectId(pk) # user_obj = self.client.test.newdb.find_one({'_id': obj_id}) # 物件導向的方法,有程式碼提示 db = self.client.get_database('test') users = db.get_collection('newdb') user_obj = users.find_one({'_id': obj_id}) print(user_obj) def search_many(self): """ 查詢多個檔案 """ db = self.client.get_database('test') students = db.get_collection('students') # stu_list = students.find() # for item in stu_list: # print(item) # 查詢年齡大於12歲的學生 stu_list = students.find({'age': {'$gt': 12}}, {'stu_name': 1, 'class_name': 1, 'age': 1}) for item in stu_list: # 注意: mongo中儲存的整數轉換成了浮點數 print(item) def paginate(self, page=1, page_size=10): """ 分頁處理 :param page: 當前的頁 :param page_size: 每一頁資料大小 :return: """ db = self.client.get_database('test') students = db.get_collection('students') offset = (page - 1) * page_size stu_list = students.find().skip(offset).limit(page_size) return stu_list def sort_data(self): """ 排序 """ db = self.client.get_database('test') grades = db.get_collection('grades') # // 將學生的語文成績從高到低排序 # db.grades.find({"grade.course_name": "語文"}).sort({"grade.score": -1}); # # //將學生的語文成績按照年齡和成績排序 # db.grades.find({"grade.course_name": "語文"}).sort({"age": -1, "grade.score": -1}); # db.grades.find({"grade.course_name": "語文"}).sort({"grade.score": -1, "age": -1}); # 按某一列排序 # data_list = grades.find({"grade.course_name": "語文"}).sort("grade.score", DESCENDING); # for item in data_list: # print(item) # 按多列排序 data_list = grades.find({"grade.course_name": "語文"}).sort([('age', DESCENDING),("grade.score", DESCENDING),]) for item in data_list: print(item) def counter_students(self): """ 統計newdb中檔案總數 """ db = self.client.get_database('test') newdb = db.get_collection('newdb') # result = newdb.count_documents({}) result = newdb.count_documents({"uname": {"$eq": "張三"}}) print(result) def test_aggregate(self): """ 聚合統計:及格的學生成績 """ db = self.client.get_database('test') grades = db.get_collection('grades') result = grades.aggregate([ # //where { '$match': {"grade.score": {'$gte': 60}} }, # //group by { '$group': { '_id': "$stu_no", 'total': {'$sum': 1} } }, # // having { '$match': { 'total': {'$eq': 3} } } ]) for item in result: print(item) if __name__ == '__main__': obj = LearnMongoDBSearch() # obj.search_one() # obj.search_user_by_pk('6411ee77b6170000b4003f95') # obj.search_many() # stu_list = obj.paginate(page=3) # for item in stu_list: # print(item) # obj.sort_data() # obj.counter_students() obj.test_aggregate()
回顧,更新資料表示式,如下表所示:
修改一個檔案,呼叫方法:
update_one(filter, update, *args)
替換一個檔案,呼叫方法:
replace_one(filter, replacement, *args)
批次修改檔案,呼叫方法:
replace_one(filter, replacement, *args)
快捷方法:
find_one_and_update(filter, update, *args) # 修改一個檔案 find_one_and_replace(filter, replacement, *args) # 替換一個檔案 # 注意返回值的不同
返回結果:
acknowledged:結果是否已經被確認
modified_count:修改的檔案數
matched_count:滿足條件的檔案數
raw_result:原始資料
upserted_id:更新的ID (upsert=True)
範例程式碼:
# -*- coding: utf-8 -*- # @Time : 2023-03-18 14:56 # @Author : AmoXiang # @File : 4.修改檔案.py # @Software: PyCharm # @Blog : https://blog.csdn.net/xw1680 from pymongo import MongoClient class LearnMongoDBUpdate(object): """ MongoDB更新練習 """ def __init__(self): self.client = MongoClient() def test_update_one(self): """ 更新一個檔案 """ db = self.client.get_database('test') newdb = db.get_collection('newdb') result = newdb.update_one({}, {'$set': {'likes': 70}}) print(result.modified_count) def test_replace_one(self): """ 替換一個檔案 """ db = self.client.get_database('test') newdb = db.get_collection('newdb') result = newdb.replace_one({}, {'uname': '張三'}) print(result.modified_count) def test_update_many(self): """ 批次更新檔案 """ db = self.client.get_database('test') newdb = db.get_collection('newdb') result = newdb.update_many({}, {'$set': {'likes': 90}}) print('修改的數量:', result.modified_count) print('滿足條件的數量:', result.matched_count) def test_update_shortcut(self): """ 更新檔案的快捷方法 """ db = self.client.get_database('test') newdb = db.get_collection('newdb') # 此處返回一個檔案物件 result = newdb.find_one_and_update({}, {'$set': {'sex': '未知'}}) print(result['_id']) if __name__ == '__main__': obj = LearnMongoDBUpdate() # obj.test_update_one() # obj.test_replace_one() # obj.test_update_many() obj.test_update_shortcut()
刪除一個檔案,呼叫方法如下:
result = db.COLLECTION_NAME.delete_one(filter, *args) # 返回已經刪除的記錄數 result.deleted_count # 刪除時返回檔案物件 find_one_and_delete(filter, *args)
批次刪除檔案,呼叫方法:
result = db.COLLECTION_NAME.delete_many(filter, *args) # 返回已經刪除的記錄數 result. deleted_count
範例程式碼:
# -*- coding: utf-8 -*- # @Time : 2023-03-18 14:34 # @Author : AmoXiang # @File : 3.刪除檔案.py # @Software: PyCharm # @Blog : https://blog.csdn.net/xw1680 from pymongo import MongoClient class LearnMongoDBDelete(object): """ MongoDB刪除練習 """ def __init__(self): self.client = MongoClient() def test_delete_one(self): """ 刪除一個檔案 """ db = self.client.get_database('test') newdb = db.get_collection('newdb') result = newdb.delete_one({}) print(result.deleted_count) def test_delete_many(self): """ 批次刪除檔案 """ db = self.client.get_database('test') users = db.get_collection('newdb') # 刪除所有的資料 result = users.delete_many({"likes": {"$lte": 90}}) print(result.deleted_count) def test_delete_shortcut(self): """ 刪除檔案的快捷方法 """ db = self.client.get_database('test') newdb = db.get_collection('newdb') result = newdb.find_one_and_delete({}) print(result['title']) if __name__ == '__main__': obj = LearnMongoDBDelete() # obj.test_delete_one() # obj.test_delete_shortcut() obj.test_delete_many()
至此今天的學習就到此結束了,筆者在這裡宣告,筆者寫文章只是為了學習交流,以及讓更多學習資料庫的讀者少走一些彎路,節省時間,並不用做其他用途,如有侵權,聯絡博主刪除即可。感謝您閱讀本篇博文,希望本文能成為您程式設計路上的領航者。祝您閱讀愉快!
到此這篇關於Python 操作 MongoDB ----非 ODM的文章就介紹到這了,更多相關Python 操作 MongoDB內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45