使用Python實現(xiàn)操作mongodb詳解
一、示例
from pymongo import MongoClient
from urllib.parse import quote
class test_mongo:
def __init__(self, host,port,user,pwd,db):
self.host = host
self.port = port
self.user = user
self.pwd = pwd
self.db = db
def build_conn_mongo(self):
"""
功能:實現(xiàn)創(chuàng)建客戶端
:return: client
"""
escaped_username = quote(self.user, safe='')
escaped_password = quote(self.pwd, safe='')
# 創(chuàng)建客戶端對象,連接MongoDB服務(wù)器
client = MongoClient('mongodb://{0}:{1}@{2}:{3}/{4}'.format(escaped_username, escaped_password, self.host, self.port, self.db))
return client
def check_mongo(self,query=None):
"""
功能:查詢信息
:param query:輸入查詢條件 eg:{"paId": "38ffefbe29ddcf3c9f574aa"}
:return:返回信息,以及獲取查詢的條數(shù)
"""
client = self.build_conn_mongo()
db = client.iot_ota
collection = db.集合名稱
results = collection.find(query)
count= collection.count_documents(query)
client.close()
return results,count
def update_mongo_by_query(self,query, set_value):
"""
功能:按照條件修改一個記錄
:param query:輸入查詢條件 eg:query1 = {"paId": "38ffefbe291a375c4aa"}
:param set_value:eg:{"$set":{"description":"yz測試"}}
:return:返回基本信息
"""
client = self.build_conn_mongo()
db = client.iot_ota
collection = db.集合名稱
results = collection.update_one(query, set_value)
client.close()
return results
def delete_package_by_query(self,query):
"""
功能:按照條件刪除一個記錄
:param query:輸入查詢條件 eg:{"otId":202501221}
:return:
"""
client = self.build_conn_mongo()
db = client.iot_ota
collection = db.集合名稱
results = collection.delete_one(query)
client.close()
return results
二、常用指令
| 序號 | 指令 | 描述 |
|---|---|---|
| 1 | db = client.數(shù)據(jù)庫名 | 獲取數(shù)據(jù)庫 |
| 2 | db.collection.find() | 篩選所有記錄 |
| 3 | db.collection.find({“key”:value}) | 按照條件進行查詢記錄 |
| 4 | db.collection.count_documents(query) | 按照條件查詢符合記錄的條數(shù) |
| 5 | db.collection.update_one(query, set_value)) | 更新一條記錄 |
| 6 | db.collection.delete_one(query) | 刪除一條記錄 |
三、遇到的問題
1、轉(zhuǎn)義賬戶和密碼,解決不符合RFC規(guī)范的問題
由于使用賬號和密碼中包含特殊字符出發(fā)點報如下錯誤:
Username and password must be escaped according to RFC 3986, use urllib.parse.quote_plus

解決辦法:
用Python的urllib.parse模塊中的quote函數(shù)來對用戶名和密碼進行轉(zhuǎn)義

2、未指定權(quán)限內(nèi)數(shù)據(jù)庫,導(dǎo)致報權(quán)限錯誤
報錯:pymongo.errors.OperationFailure: Authentication failed具體如下圖

解決辦法:–由于使用的賬戶的權(quán)限只有更db_name的權(quán)限,此處如不指明具體的數(shù)據(jù)庫,則無法訪問client = MongoClient(‘mongodb://{0}:{1}@X.x.x.x:27017/db_name’.format(escaped_username,escaped_password))
3、較新版本的PyMongo中,update和remove方法已經(jīng)被棄用

解決方法:
使用update_one()和update_many()方法來進行單條記錄或多條記錄的更新操作
使用delete_one和delete_many方法來替代remove
到此這篇關(guān)于使用Python實現(xiàn)操作mongodb詳解的文章就介紹到這了,更多相關(guān)Python操作mongodb內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python re.split方法分割字符串的實現(xiàn)示例
本文主要介紹了Python re.split方法分割字符串的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
深入解析Python中BeautifulSoup4的基礎(chǔ)知識與實戰(zhàn)應(yīng)用
BeautifulSoup4正是一款功能強大的解析器,能夠輕松解析HTML和XML文檔,本文將介紹BeautifulSoup4的基礎(chǔ)知識,并通過實際代碼示例進行演示,感興趣的可以了解下2024-02-02
教你使用Python建立任意層數(shù)的深度神經(jīng)網(wǎng)絡(luò)
這篇文章主要介紹了Python建立任意層數(shù)的深度神經(jīng)網(wǎng)絡(luò),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08
python實現(xiàn)sm2和sm4國密(國家商用密碼)算法的示例
這篇文章主要介紹了python實現(xiàn)sm2和sm4國密(國家商用密碼)算法的示例,幫助大家使用python加密文件,感興趣的朋友可以了解下2020-09-09
如何解決flask修改靜態(tài)資源后緩存文件不能及時更改問題
在本篇內(nèi)容里小編給大家整理的是關(guān)于如何解決flask修改靜態(tài)資源后緩存文件不能及時更改問題,需要的朋友們可以學(xué)習(xí)下。2020-08-08
python之cur.fetchall與cur.fetchone提取數(shù)據(jù)并統(tǒng)計處理操作
這篇文章主要介紹了python之cur.fetchall與cur.fetchone提取數(shù)據(jù)并統(tǒng)計處理操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04

