最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用PyMongo4.x操作MongoDB的教程分享

 更新時(shí)間:2023年09月24日 11:03:49   作者:CodeDevMaster  
PyMongo是一個(gè)Python編程語(yǔ)言中用于連接和操作MongoDB數(shù)據(jù)庫(kù)的庫(kù),它提供了豐富的功能和API,使開發(fā)者能夠在Python中輕松地進(jìn)行MongoDB的數(shù)據(jù)交互和管理,本文給大家總結(jié)了Python如何使用PyMongo4.x操作MongoDB,需要的朋友可以參考下

概述

PyMongo是一個(gè)Python編程語(yǔ)言中用于連接和操作MongoDB數(shù)據(jù)庫(kù)的庫(kù)。它提供了豐富的功能和API,使開發(fā)者能夠在Python中輕松地進(jìn)行MongoDB的數(shù)據(jù)交互和管理。

MongoDB 驅(qū)動(dòng)程序:https://api.mongodb.com/

PyMongo文檔:https://pymongo.readthedocs.io/en/stable/api/index.html

MongoDB文檔:https://www.mongodb.com/docs/manual/

安裝Python庫(kù)

pip install pymongo==4.3.3

注意:不同版本的PyMongo在語(yǔ)法和API方面可能會(huì)有差異一定差異

連接、認(rèn)證

# 導(dǎo)入模塊
from pymongo import *
# 創(chuàng)建客戶端對(duì)象,使用賬號(hào)登錄
# 方式一:
'''
host:連接的主機(jī)名或IP地址,默認(rèn)為localhost
port:連接使用的端口號(hào),默認(rèn)為27017
username:用于身份驗(yàn)證的用戶名,默認(rèn)為None
password:用于身份驗(yàn)證的密碼,默認(rèn)為None
authSource:用于身份驗(yàn)證的數(shù)據(jù)庫(kù),默認(rèn)為None,表示使用admin數(shù)據(jù)庫(kù)
'''
client = MongoClient(host="112.74.96.150", port=27017, username="test", password="123456", authSource="demo")
# 方式二:
# url = "mongodb://test:123456@112.74.96.150/demo"
# client = MongoClient(url)
# 斷開與MongoDB的連接
client.close()

創(chuàng)建數(shù)據(jù)庫(kù)、集合

# 判斷數(shù)據(jù)庫(kù)是否已存在
dblist = client.list_database_names()
if "demo" in dblist:
  print("demo 數(shù)據(jù)庫(kù)已存在!")
# 創(chuàng)建、獲取數(shù)據(jù)庫(kù)對(duì)象
db = client.demo
db = client['demo']
#  判斷集合是否存在
collist = db . list_collection_names()
if "user" in collist:  
  print("user 集合已存在!")
# 創(chuàng)建、獲取集合
collection = db.user
collection = db["user"]

注意: 在 MongoDB 中,數(shù)據(jù)庫(kù)創(chuàng)建后要?jiǎng)?chuàng)建集合(數(shù)據(jù)表)并插入一個(gè)文檔(記錄),數(shù)據(jù)庫(kù)才會(huì)真正創(chuàng)建。

新增

MongoDB 中的一個(gè)文檔類似 SQL 表中的一條記錄。

單條插入

集合中插入一個(gè)文檔使用 insert_one() 方法,該方法的第一參數(shù)是字典

result = collection.insert_one({"name": "Python", "age": 25})
# 插入操作是否被確認(rèn)
print(result.acknowledged)  # True
# 插入文檔的 _id 字段的值。如果文檔沒(méi)有設(shè)置 _id 字段,則 inserted_id 的值為一個(gè)新生成的 ObjectId。
print(result.inserted_id)  # 63f569b89a8014989e3b53f6
# 批量插入
result = collection.insert_many([{"name": "Java", "age": 55}, {"name": "Vue", "age": 33}])
# 插入操作是否被確認(rèn)
print(result.acknowledged)  # True
# 插入的所有文檔的 _id 值的列表。
print(result.inserted_ids)  # [ObjectId('63f569b89a8014989e3b53f7'), ObjectId('63f569b89a8014989e3b53f8')]

批量插入

集合中插入多個(gè)文檔使用 insert_many() 方法,該方法的第一參數(shù)是字典列表

result = collection.insert_many([{"name": "Java", "age": 55}, {"name": "Vue", "age": 33}])
# 插入操作是否被確認(rèn)
print(result.acknowledged)  # True
# 插入的所有文檔的 _id 值的列表。
print(result.inserted_ids)  # [ObjectId('63f569b89a8014989e3b53f7'), ObjectId('63f569b89a8014989e3b53f8')]

查詢

MongoDB 中使用了 find 和 find_one 方法來(lái)查詢集合中的數(shù)據(jù),它類似于 SQL 中的 SELECT 語(yǔ)句。

查詢單條

使用 find_one()方法來(lái)查詢集合中的一條數(shù)據(jù)

result = collection.find_one({"name": "Python"})
print(result)

查詢多條

使用find() 方法查詢集合中的所有數(shù)據(jù)

rows = collection.find({"name": "Python"})
for row in rows:
    print(row)

查詢指定字段的數(shù)據(jù)

使用 find() 方法來(lái)查詢指定字段的數(shù)據(jù),將要返回的字段對(duì)應(yīng)值設(shè)置為 1

注意:除了 _id,不能在一個(gè)對(duì)象中同時(shí)指定 0 和 1

rows = collection.find({},{ "_id": 0, "name": 1, "age": 1 }):
for x in 
  print(x)

高級(jí)查詢

查詢條件語(yǔ)句中使用修飾符

# 查詢年齡大于等于30
query = { "age": { "$gte": 30 } }
result = collection.find(query)
for document in result:
    print(document)

使用正則表達(dá)式查詢

可以使用正則表達(dá)式作為修飾符

# 查看name 字段中以字母'java'開頭的數(shù)據(jù)
query = { "name": { "$regex": "^java" } }
result = collection.find(query)
for document in result:
    print(document)

返回指定條數(shù)記錄

要對(duì)查詢結(jié)果設(shè)置指定條數(shù)的記錄可以使用 limit() 方法,該方法只接受一個(gè)數(shù)字參數(shù)

result = collection.find().limit(3)
for x in result:
  print(x)

查詢選擇器

比較操作符

符號(hào)描述示例
$eq匹配等于指定值的值{'age': {'$eq': 20}}
$lt匹配小于指定值的值{'age': {'$lt': 20}}
$lte匹配小于或等于指定值的值{'age': {'$lte': 20}}
$gt匹配大于指定值的值{'age': {'$gt': 20}}
$gte匹配大于或等于指定值的值{'age': {'$gte': 20}}
$ne匹配所有不等于指定值的值{'age': {'$ne': 20}}
$in匹配數(shù)組中指定的任何值{'age': {'$in': [20, 30]}}
$nin不匹配數(shù)組中指定的任何值{'age': {'$nin': [20, 30]}}

邏輯操作符

符號(hào)描述示例說(shuō)明
$and查詢同時(shí)滿足多個(gè)條件的文檔query = { "$and": [ {"name": "electronics"}, {"age": {"$lt": 30}} ] } result = collection.find(query)查詢了name為"electronics"且age小于30的數(shù)據(jù)
$not查詢不滿足指定條件的文檔query = { "age": { "$not": {"$gt": 50} # 不大于50 } }查詢了age不大于50的數(shù)據(jù)
$nor查詢不滿足任何指定條件的文檔query = { "$nor": [ {"name": "electronics"}, {"age": {"$gt": 50}} ] }查詢name既不屬于"electronics",也不滿足age大于50的數(shù)據(jù)
$or查詢滿足任意一個(gè)指定條件的文檔query = { "$or": [ {"name": "electronics"}, {"age": {"$gt": 50}} ] }查詢了name滿足"electronics"或age大于50的數(shù)據(jù)

其他常見(jiàn)操作符

符號(hào)描述示例
$regex匹配正則表達(dá)式{'name': {'$regex': '^java.*'}}
$exists屬性是否存在{'name': {'$exists': True}}
$text文本查詢{'$text': {'$search': 'java'}}
$where高級(jí)條件查詢{'$where': 'this.name.length > 5'}
$type類型判斷{'age': {'$type': 'int'}}
$mod對(duì)字段進(jìn)行取模運(yùn)算

這里:5是除數(shù),0是余數(shù)
{'age': {'$mod': [5, 0]}}

更新

更新單條

使用 update_one() 方法修改文檔中的記錄,方法第一個(gè)參數(shù)為查詢的條件,第二個(gè)參數(shù)為要修改的字段。

如果查找到的匹配數(shù)據(jù)多于一條,則只會(huì)修改第一條

'''
matched_count:符合篩選條件的文檔數(shù)
modified_count:實(shí)際被更新的文檔數(shù)
upserted_id:如果執(zhí)行的是 upsert 操作,則包含新插入文檔的 _id 值
'''
result = collection.update_one({"name": "Python"}, {"$set": {"age": 25}})
print(result.matched_count)
print(result.modified_count)
print(result.upserted_id)
# 不存在就插入
data = {"name": "Python", "age": 25}
client.test.test.update_one({'name': 'Java'}, {'$set': data}, upsert=True)

批量更新

使用update_many()方法修改多個(gè)文檔中的記錄,會(huì)修改所有匹配到的記錄

collection.update_many({"name": "Python"}, {"$set": {"age": 22}})
# 不存在就插入
data = {"name": "Python", "age": 25}
client.test.test.update_one({'name': 'Java'}, {'$set': data}, upsert=True)

刪除

刪除文檔

使用 delete_one() 方法來(lái)刪除一個(gè)文檔,該方法第一個(gè)參數(shù)為查詢對(duì)象,指定要?jiǎng)h除哪些數(shù)據(jù)

'''
acknowledged:一個(gè)布爾值,表示操作是否被確認(rèn)(即是否執(zhí)行成功)
deleted_count:一個(gè)整數(shù),表示被刪除的文檔數(shù)量
'''
result = collection.delete_one({"name": "Python"})
print(result.acknowledged)
print(result.deleted_count)

批量刪除

使用 delete_many() 方法來(lái)刪除多個(gè)文檔,該方法第一個(gè)參數(shù)為查詢對(duì)象,指定要?jiǎng)h除哪些數(shù)據(jù)

collection.delete_many({"age": {"$gt": 20}})

刪除集合中的所有文檔

delete_many() 方法如果傳入的是一個(gè)空的查詢對(duì)象,則會(huì)刪除集合中的所有文檔

x = user.delete_many({})
print(x.deleted_count, "個(gè)文檔已刪除")
db.user.delete_many({})

刪除集合

使用drop()方法來(lái)刪除一個(gè)集合。

# 返回true:刪除成功
# 返回false:刪除失敗(集合不存在)
collection.drop()

其他

排序

sort()方法可以指定升序或降序排序。

第一個(gè)參數(shù)為要排序的字段,第二個(gè)字段指定排序規(guī)則,1為升序,-1為降序,默認(rèn)為升序。

升序

result = collection.find().sort("age")
for x in result:
  print(x)

降序

result = collection.find().sort("age", -1)
for x in result:
  print(x)

計(jì)數(shù)

可以使用count()方法查詢結(jié)果有多少條數(shù)據(jù)

count = collection.find().count()
query = { "age": { "$gte": 30 } }
count = collection.find(query).count()

分組查詢

在MongoDB中,可以使用聚合管道(aggregation pipeline)來(lái)實(shí)現(xiàn)分組查詢

# 構(gòu)建聚合管道
pipeline = [
    {"$group": {"_id": "$category", "total_sales": {"$sum": "$amount"}}},
    {"$sort": {"total_sales": -1}},
    {"$limit": 3}
]
# 執(zhí)行聚合查詢
result = collection.aggregate(pipeline)
for document in result:
    print(document)

以上就是Python使用PyMongo4.x操作MongoDB的詳細(xì)內(nèi)容,更多關(guān)于PyMongo4.x操作MongoDB的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • mac安裝python3后使用pip和pip3的區(qū)別說(shuō)明

    mac安裝python3后使用pip和pip3的區(qū)別說(shuō)明

    這篇文章主要介紹了mac安裝python3后使用pip和pip3的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • python之http請(qǐng)求模擬器(tk)使用及說(shuō)明

    python之http請(qǐng)求模擬器(tk)使用及說(shuō)明

    文章總結(jié)了使用Python和Tkinter創(chuàng)建一個(gè)HTTP請(qǐng)求模擬器的經(jīng)驗(yàn),提供了代碼示例,并鼓勵(lì)讀者參考和支持腳本之家
    2026-01-01
  • Python開發(fā)必備知識(shí)內(nèi)存管理與垃圾回收

    Python開發(fā)必備知識(shí)內(nèi)存管理與垃圾回收

    Python是一種高級(jí)編程語(yǔ)言,因其簡(jiǎn)潔而強(qiáng)大而備受歡迎,然而如其他編程語(yǔ)言一樣,Python也面臨著內(nèi)存管理的挑戰(zhàn),在Python中,垃圾回收是一項(xiàng)關(guān)鍵任務(wù),用于自動(dòng)釋放不再使用的內(nèi)存,以避免內(nèi)存泄漏,本文將介紹Python中的垃圾回收機(jī)制,以及如何通過(guò)優(yōu)化代碼來(lái)提高性能
    2023-11-11
  • python編程使用PyQt制作預(yù)覽窗口游戲中的小地圖

    python編程使用PyQt制作預(yù)覽窗口游戲中的小地圖

    這篇文章主要為大家介紹了python使用PyQt制作預(yù)覽窗口游戲中的小地圖實(shí)現(xiàn)示例過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • Django外鍵(ForeignKey)操作以及related_name的作用詳解

    Django外鍵(ForeignKey)操作以及related_name的作用詳解

    這篇文章主要介紹了Django外鍵(ForeignKey)操作以及related_name的作用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python簡(jiǎn)單的三元一次方程求解實(shí)例

    python簡(jiǎn)單的三元一次方程求解實(shí)例

    這篇文章主要介紹了python簡(jiǎn)單的三元一次方程求解實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • python實(shí)現(xiàn)簡(jiǎn)單的貪吃蛇游戲

    python實(shí)現(xiàn)簡(jiǎn)單的貪吃蛇游戲

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單的貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • 使用python調(diào)用llama3進(jìn)行對(duì)話的操作步驟

    使用python調(diào)用llama3進(jìn)行對(duì)話的操作步驟

    Meta?已將最新的?LLaMa3?進(jìn)行了開源,因此,我們也可以方便的使用?Python?進(jìn)行?LLaMa3?模型的調(diào)用和開發(fā),本文給大家介紹了如何使用?python?調(diào)用?llama3?進(jìn)行對(duì)話,需要的朋友可以參考下
    2024-09-09
  • python實(shí)現(xiàn)將元祖轉(zhuǎn)換成數(shù)組的方法

    python實(shí)現(xiàn)將元祖轉(zhuǎn)換成數(shù)組的方法

    這篇文章主要介紹了python實(shí)現(xiàn)將元祖轉(zhuǎn)換成數(shù)組的方法,涉及Python中l(wèi)ist方法的使用技巧,需要的朋友可以參考下
    2015-05-05
  • python多線程下信號(hào)處理程序示例

    python多線程下信號(hào)處理程序示例

    這篇文章主要為大家詳細(xì)介紹了python多線程下信號(hào)處理程序示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05

最新評(píng)論

涞源县| 金川县| 康马县| 岳西县| 汉中市| 桓仁| 海兴县| 鹿邑县| 寿光市| 台州市| 迁西县| 沙雅县| 沙坪坝区| 百色市| 淅川县| 左权县| 台东县| 灵宝市| 阜城县| 牟定县| 临海市| 裕民县| 兰考县| 沾化县| 万州区| 平山县| 惠水县| 苏尼特左旗| 青田县| 涟源市| 饶河县| 电白县| 镇康县| 和龙市| 招远市| 五华县| 永德县| 竹北市| 大兴区| 仙游县| 来安县|