更新時(shí)間:2023年01月29日16時(shí)14分 來(lái)源:傳智教育 瀏覽次數(shù):
Python是目前比較流行的程序設(shè)計(jì)語(yǔ)言,特別是在人工智能和大數(shù)據(jù)分析處理上,市場(chǎng)空間是比較大的。寫此同時(shí),MongDB是比較流行的NoSQL數(shù)據(jù)庫(kù)的解決方案,兩者結(jié)合使用的場(chǎng)景非常多。
要想在Python項(xiàng)目中使用MongoDB數(shù)據(jù)庫(kù),需要在Python標(biāo)準(zhǔn)庫(kù)的基礎(chǔ)上添加對(duì)MongoDB的支持。截止到目前,常用的開(kāi)發(fā)MongoDB的包為PyMongo。下面將針對(duì)PyMongo的相關(guān)內(nèi)容進(jìn)行詳細(xì)介紹。
PyMongo的概念
PyMongo是用于MongoDB的開(kāi)發(fā)工具,是Python 操作MongoDB數(shù)據(jù)庫(kù)的推薦方式。
PyMongo中主要提供了如下類與MongoDB數(shù)據(jù)庫(kù)進(jìn)行交互:
◆MongoClient類:用于與MongoDB服務(wù)器建立連接。
◆DataBase類:表示MongoDB中的數(shù)據(jù)庫(kù)。
◆Collection 類:表示MongoDB中的集合。
◆Cursor 類:表示查詢方法返回的結(jié)果,用于對(duì)多行數(shù)據(jù)進(jìn)行遍歷。
PyMongo庫(kù)的基本使用流程如下:
(1)創(chuàng)建一個(gè)MongoClient類的對(duì)象,與MongDB服務(wù)器建立連接。
(2)通過(guò)MongoClient對(duì)象訪問(wèn)數(shù)據(jù)庫(kù)(DataBase 對(duì)象)。
(3)使用上個(gè)步驟的數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)集合Colletio對(duì)象)。
(4)調(diào)用集合中提供的方法在集合中插人、刪除、修改和查詢文檔。
PyMongo的基本操作
由于PyMongo是第三方庫(kù),所以需要安裝之后才能在Python中使用。在Windows系統(tǒng)下安裝可使用pip命令:
安裝完成之后,就可以使用PyMongo操作MongoDB 數(shù)據(jù)庫(kù)。首先要在項(xiàng)目中導(dǎo)人PyMongo庫(kù)的全部?jī)?nèi)容或者使用到的類,通常情況下采用如下方式引人:
from pymongo import *
導(dǎo)人PyMongo庫(kù)之后,就可以使用該庫(kù)進(jìn)行與數(shù)據(jù)庫(kù)相關(guān)的操作。下面就針對(duì)PyMongo庫(kù)的基本操作一一進(jìn)行介紹。
1.創(chuàng)建連接
開(kāi)始使用PyMongo的第一步 是創(chuàng)建一個(gè) MongoClient類的對(duì)象,用于連接MongoDB服務(wù)器。
可以通過(guò)MongoClient類的構(gòu)造方法進(jìn)行創(chuàng)建。該方法語(yǔ)法格式如下:
上述方法中包含的參數(shù)含義如下:
(1)host參數(shù):表示主機(jī)名或IP地址。
(2)port參數(shù):表示連接的端口號(hào)。
(3)document_class參數(shù):從此客戶端查詢返回的文檔默認(rèn)使用此類。
(4)tz_aware參數(shù):如果為True,則此MongoClient作為文檔中的值返回的datetime實(shí)例,將會(huì)被時(shí)區(qū)所識(shí)別。
(5)connect參數(shù):若為True(默認(rèn)),則立即開(kāi)始在后臺(tái)連接到MongoDB,否則連接到第一個(gè)操作。
建立連接的示例如下:
client=MongoClient()
上述示例中沒(méi)有傳人任何參數(shù),將建立連接到默認(rèn)的主機(jī)(localhost)和端口(27017 )。
除此之外,可以顯式地指定主機(jī)和使用端口。例如:
client=MongoClient ('localhost', 27017)
也可以使用MongoDB的URL路徑形式傳人參數(shù)。例如:
client=MongoClient('mongodb://localhost:27017')
2.訪問(wèn)數(shù)據(jù)庫(kù)
只要已經(jīng)建立了與Mongo服務(wù)器的連接,就可以直接訪問(wèn)任何數(shù)據(jù)庫(kù)。訪問(wèn)數(shù)據(jù)庫(kù)的方式比較簡(jiǎn)單,可以將其當(dāng)作屬性一樣,使用點(diǎn)語(yǔ)法進(jìn)行訪問(wèn)。例如:
db=client.pymongo_test
此外,還可以使用字典的形式進(jìn)行訪問(wèn)。例如:
db=client['pymongo_test']
3.創(chuàng)建集合
創(chuàng)建集合的方式與創(chuàng)建數(shù)據(jù)庫(kù)類似,通過(guò)數(shù)據(jù)庫(kù)使用點(diǎn)語(yǔ)法的形式進(jìn)行訪問(wèn)。其語(yǔ)法格式
如下:
例如,訪問(wèn)db數(shù)據(jù)庫(kù)中的student集合,示例代碼如下:
column=db.student
4.插入文檔
往集合中插人文檔的方法主要有如下兩個(gè):
(1) insert_one()方法:插人一條文檔對(duì)象。
(2) insert_many()方法:插人列表形式的多條文檔對(duì)象。
插人一條文檔的示例如下:
try: client=MongoClient(host='localhost', port=27017) db=client.mongo_insert collection=db.student result=collection.insert_one({'name':'zhangsan', 'age':20}) print(result) except Exception as error: print(error)
輸出結(jié)果為:
<pymongo.results.InsertOneResult object at 0x0000000034CFF88>
插人多條文檔的示例如下:
result=column.insert_many([{'name':'zhangsan', 'age': 20}, {'name': 'lisi', 'age': 21}, {'name': 'wangwu', 'age': 22}])
5.查詢文檔
用于查找文檔的方法主要有如下幾個(gè):
(1)find one()方法:查找-條文檔對(duì)象。
(2)find many0方法:查找多條文檔對(duì)象。
(3)find0方法:查找所有文檔對(duì)象。
下面以find0方法為例,介紹如何查詢集合中的所有文檔。具體如下:
try: client=MongoClient() db=client.mongo_insert collection=db.student result=collection.find({'age': 20}) print(result) for doc in result: print(doc) except Exception as error: print(error)
輸出結(jié)果為:
<pymongo.cursor.Cursor object at 0x00000000038F89B0> {'_id': objectId('59f420f386d7080f1824d8c1'), 'name':'zhangsan', 'age': 20}
6.更新文檔
用于更新文檔的方法主要有如下幾個(gè):
(1) update_one()方法:更新一條文檔對(duì)象。
(2) update_many()方法:更新多條文檔對(duì)象。
更新一條文檔的示例如下:
collection.update_one({'age': 22},{'$set': {'name': 'zhaoliu'}})
更新多條文檔的示例如下:
collection.update_many({'age': 22}, {'$set': {'name': 'zhaoliu'}})
7.刪除文檔
用于刪除文檔的方法包括如下幾個(gè):
(1) delele_one()方法:刪除一條文檔對(duì)象。
(2) delete_many()方法:刪除所有記錄。
下面以delete_many()方法進(jìn)行舉例,介紹如何從集合中刪除所有的文檔。具體代碼如下:
collection.delete_many({})
通過(guò)對(duì)上述操作的學(xué)習(xí),熟練地掌握了數(shù)據(jù)庫(kù)的增加、刪除、查找、修改等基本操作之后,再去學(xué)習(xí)和提升就不會(huì)再有很大的障礙。實(shí)際上,使用PyMongo庫(kù)操作數(shù)據(jù)庫(kù)是非常簡(jiǎn)單的,以后如果遇到更加復(fù)雜的需求,在網(wǎng)絡(luò)上查一下官 方文檔或者技術(shù)博客,應(yīng)該都能順利解決。
北京校區(qū)