欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

概述

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

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

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

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

安裝Python庫

pip install pymongo==4.3.3

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

連接、認證

# 導入模塊
from pymongo import *
# 創(chuàng)建客戶端對象,使用賬號登錄
# 方式一:
'''
host:連接的主機名或IP地址,默認為localhost
port:連接使用的端口號,默認為27017
username:用于身份驗證的用戶名,默認為None
password:用于身份驗證的密碼,默認為None
authSource:用于身份驗證的數(shù)據(jù)庫,默認為None,表示使用admin數(shù)據(jù)庫
'''
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ù)庫、集合

# 判斷數(shù)據(jù)庫是否已存在
dblist = client.list_database_names()
if "demo" in dblist:
  print("demo 數(shù)據(jù)庫已存在!")
# 創(chuàng)建、獲取數(shù)據(jù)庫對象
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ù)庫創(chuàng)建后要創(chuàng)建集合(數(shù)據(jù)表)并插入一個文檔(記錄),數(shù)據(jù)庫才會真正創(chuàng)建。

新增

MongoDB 中的一個文檔類似 SQL 表中的一條記錄。

單條插入

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

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

批量插入

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

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

查詢

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

查詢單條

使用 find_one()方法來查詢集合中的一條數(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() 方法來查詢指定字段的數(shù)據(jù),將要返回的字段對應值設(shè)置為 1

注意:除了 _id,不能在一個對象中同時指定 0 和 1

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

高級查詢

查詢條件語句中使用修飾符

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

使用正則表達式查詢

可以使用正則表達式作為修飾符

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

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

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

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

查詢選擇器

比較操作符

符號描述示例
$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]}}

邏輯操作符

符號描述示例說明
$and查詢同時滿足多個條件的文檔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查詢滿足任意一個指定條件的文檔query = { "$or": [ {"name": "electronics"}, {"age": {"$gt": 50}} ] }查詢了name滿足"electronics"或age大于50的數(shù)據(jù)

其他常見操作符

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

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

更新

更新單條

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

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

'''
matched_count:符合篩選條件的文檔數(shù)
modified_count:實際被更新的文檔數(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()方法修改多個文檔中的記錄,會修改所有匹配到的記錄

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() 方法來刪除一個文檔,該方法第一個參數(shù)為查詢對象,指定要刪除哪些數(shù)據(jù)

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

批量刪除

使用 delete_many() 方法來刪除多個文檔,該方法第一個參數(shù)為查詢對象,指定要刪除哪些數(shù)據(jù)

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

刪除集合中的所有文檔

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

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

刪除集合

使用drop()方法來刪除一個集合。

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

其他

排序

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

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

升序

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

降序

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

計數(shù)

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

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

分組查詢

在MongoDB中,可以使用聚合管道(aggregation pipeline)來實現(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的詳細內(nèi)容,更多關(guān)于PyMongo4.x操作MongoDB的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python的dict判斷key是否存在的方法

    python的dict判斷key是否存在的方法

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python的dict判斷key是否存在的方法,有需要的朋友們可以參考下。
    2020-12-12
  • python匿名函數(shù)用法實例分析

    python匿名函數(shù)用法實例分析

    這篇文章主要介紹了python匿名函數(shù)用法,結(jié)合實例形式分析了Python匿名函數(shù)的特點、功能及相關(guān)使用方法,需要的朋友可以參考下
    2019-08-08
  • OpenCV2.3.1+Python2.7.3+Numpy等的配置解析

    OpenCV2.3.1+Python2.7.3+Numpy等的配置解析

    這篇文章主要介紹了OpenCV2.3.1+Python2.7.3+Numpy等的配置解析,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • pycharm的python_stubs問題

    pycharm的python_stubs問題

    這篇文章主要介紹了pycharm的python_stubs問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Linux下python制作名片示例

    Linux下python制作名片示例

    這篇文章主要介紹了Linux下python制作名片示例的相關(guān)資料,需要的朋友可以參考下
    2018-07-07
  • Python實現(xiàn)LRU算法

    Python實現(xiàn)LRU算法

    這篇文章主要為大家詳細介紹了Python實現(xiàn)LRU緩存置換算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • python中文亂碼不著急,先看懂字節(jié)和字符

    python中文亂碼不著急,先看懂字節(jié)和字符

    這篇文章主要介紹了python中文亂碼不著急,先看懂字節(jié)和字符,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Pycharm2020最新激活碼|永久激活(附最新激活碼和插件的詳細教程)

    Pycharm2020最新激活碼|永久激活(附最新激活碼和插件的詳細教程)

    這篇文章主要介紹了Pycharm2020最新激活碼|永久激活(附最新激活碼和插件的詳細教程),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • po+selenium+unittest自動化測試項目實戰(zhàn)

    po+selenium+unittest自動化測試項目實戰(zhàn)

    本文主要介紹了po+selenium+unittest自動化測試項目實戰(zhàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Python閉包裝飾器使用方法匯總

    Python閉包裝飾器使用方法匯總

    這篇文章主要介紹了Python閉包裝飾器使用方法匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06

最新評論