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

Python如何使用pymongo連接MongoDB數(shù)據(jù)庫(kù)并進(jìn)行相關(guān)操作

 更新時(shí)間:2023年05月24日 10:35:38   作者:kim?samuel  
PyMongo是驅(qū)動(dòng)程序,使python程序能夠使用Mongodb數(shù)據(jù)庫(kù),使用python編寫而成,下面這篇文章主要給大家介紹了關(guān)于Python如何使用pymongo連接MongoDB數(shù)據(jù)庫(kù)并進(jìn)行相關(guān)操作的相關(guān)資料,需要的朋友可以參考下

一、基本概述

目前電腦上已經(jīng)下載了MongoDB數(shù)據(jù)庫(kù)、navicat for mongodb作為mongoDB的可視化工具,形如navicat for mysql作為mysql的可視化工具。

使用Pycharm編寫python代碼連接mongodb,創(chuàng)建數(shù)據(jù)庫(kù),創(chuàng)建集合(集合是指形如mysql中的sql數(shù)據(jù)表)等操作。

使用pymongo進(jìn)行數(shù)據(jù)庫(kù)連接,因此需要在pycharm中下載。

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

創(chuàng)建數(shù)據(jù)庫(kù)需要使用 MongoClient 對(duì)象,并且指定連接的 URL 地址和要?jiǎng)?chuàng)建的數(shù)據(jù)庫(kù)名。

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
#新建數(shù)據(jù)庫(kù)
mydb = myclient["runoobdbs"]

注意:

此時(shí)navicat還無(wú)法看見(jiàn)新建的數(shù)據(jù)庫(kù),這是因?yàn)樵?MongoDB 中,數(shù)據(jù)庫(kù)只有在內(nèi)容插入后才會(huì)創(chuàng)建!
就是說(shuō),數(shù)據(jù)庫(kù)創(chuàng)建后要?jiǎng)?chuàng)建集合(數(shù)據(jù)表)并插入一個(gè)文檔(記錄),數(shù)據(jù)庫(kù)才會(huì)真正創(chuàng)建。

三、判斷數(shù)據(jù)庫(kù)是否存在

代碼如下:

#判斷數(shù)據(jù)庫(kù)是否存在
dblist = myclient.list_database_names()     #list_database_names()獲取數(shù)據(jù)庫(kù)名
# dblist = myclient.database_names()
if "runoobdbs" in dblist:
  print("數(shù)據(jù)庫(kù)已存在!")

四、創(chuàng)建集合

代碼如下:

#創(chuàng)建集合
mycol = mydb["sites"]

五、判斷集合是否存在

代碼如下:

#判斷集合是否存在
collist = mydb. list_collection_names()    #獲取集合名
# collist = mydb.collection_names()
if "sites" in collist:   # 判斷 sites 集合是否存在
  print("集合已存在!")

此時(shí)仍舊無(wú)法顯示數(shù)據(jù)庫(kù)和集合名。

六、插入文檔

1.插入單個(gè)文檔

文檔就是指的里面的數(shù)據(jù)。

#插入文檔
mydict = {"name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com"}
x = mycol.insert_one(mydict)
print(x)

若是沒(méi)有數(shù)據(jù)庫(kù)、集合在,此代碼上面要有創(chuàng)建數(shù)據(jù)庫(kù)、創(chuàng)建集合的代碼。

代碼運(yùn)行前MongoDB顯示數(shù)據(jù)庫(kù)名稱:

1

代碼運(yùn)行后MongoDB顯示數(shù)據(jù)庫(kù)名稱:

2

運(yùn)行后navicat fo rmongodb顯示如下:

3

Pycharm運(yùn)行第一次結(jié)果:

4

第二次運(yùn)行結(jié)果:

5

此時(shí)全部代碼有:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

#新建數(shù)據(jù)庫(kù)
mydb = myclient["runoobdbs"]

#判斷數(shù)據(jù)庫(kù)是否存在
dblist = myclient.list_database_names()     #list_database_names()獲取數(shù)據(jù)庫(kù)名
# dblist = myclient.database_names()
if "runoobdbs" in dblist:
  print("數(shù)據(jù)庫(kù)已存在!")

#創(chuàng)建集合
mycol = mydb["sites"]

#判斷集合是否存在
collist = mydb. list_collection_names()    #獲取集合名
# collist = mydb.collection_names()
if "sites" in collist:   # 判斷 sites 集合是否存在
  print("集合已存在!")

#插入文檔
mydict = {"name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com"}

x = mycol.insert_one(mydict)
print(x)

2.返回 _id 字段

insert_one() 方法返回 InsertOneResult 對(duì)象,該對(duì)象包含 inserted_id 屬性,它是插入文檔的 id 值。

返回 _id 字段只需要在以上代碼最后下再加一句print(x.inserted_id)即可。

結(jié)果是:

1

而此時(shí)由于運(yùn)行了三次,出現(xiàn)了三行內(nèi)容一樣,id不一樣的文檔。

1

3.插入多個(gè)文檔

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

代碼如下:

#插入多個(gè)文檔
mylist = [
  {"name": "Taobao", "alexa": "100", "url": "https://www.taobao.com"},
  {"name": "QQ", "alexa": "101", "url": "https://www.qq.com"},
  {"name": "Facebook", "alexa": "10", "url": "https://www.facebook.com"},
  {"name": "知乎", "alexa": "103", "url": "https://www.zhihu.com"},
  {"name": "Github", "alexa": "109", "url": "https://www.github.com"}
]
x = mycol.insert_many(mylist)
# 輸出插入的所有文檔對(duì)應(yīng)的 _id 值
print(x.inserted_ids)

Pycharm運(yùn)行結(jié)果:

1

navicat顯示如下:

2

也可以使用MongoDB查看。

1

補(bǔ)充:
use+空格+數(shù)據(jù)庫(kù),作用是數(shù)據(jù)庫(kù)不在時(shí)新建,在時(shí)切換到此數(shù)據(jù)庫(kù)下。
db.creatCollection('集合名'),創(chuàng)建集合。
db.集合名.find()方法顯示此集合下所有數(shù)據(jù)。

4.插入指定 _id 的多個(gè)文檔

我們也可以自己指定 id,插入,以下實(shí)例我們?cè)?site2 集合中插入數(shù)據(jù),_id 為我們指定的:

mycol2 = mydb["site2"]
mylist2 = [
  {"_id": 1, "name": "RUNOOB", "cn_name": "菜鳥(niǎo)教程"},
  {"_id": 2, "name": "Google", "address": "Google 搜索"},
  {"_id": 3, "name": "Facebook", "address": "臉書(shū)"},
  {"_id": 4, "name": "Taobao", "address": "淘寶"},
  {"_id": 5, "name": "Zhihu", "address": "知乎"}
]
x = mycol2.insert_many(mylist2)
# 輸出插入的所有文檔對(duì)應(yīng)的 _id 值
print(x.inserted_ids)

Pycharm運(yùn)行結(jié)果:

1

navicat顯示如下:

1

此時(shí)全部代碼如下:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

#新建數(shù)據(jù)庫(kù)
mydb = myclient["runoobdbs"]
#創(chuàng)建集合
mycol = mydb["sites"]
'''
#判斷數(shù)據(jù)庫(kù)是否存在
dblist = myclient.list_database_names()     #list_database_names()獲取數(shù)據(jù)庫(kù)名
# dblist = myclient.database_names()
if "runoobdbs" in dblist:
  print("數(shù)據(jù)庫(kù)已存在!")

#判斷集合是否存在
collist = mydb. list_collection_names()    #獲取集合名
# collist = mydb.collection_names()
if "sites" in collist:   # 判斷 sites 集合是否存在
  print("集合已存在!")
'''
#插入文檔
#mydict = {"name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com"}

#x = mycol.insert_one(mydict)
#print(x)
#print(x.inserted_id)

#插入多個(gè)文檔
#mylist = [
#  {"name": "Taobao", "alexa": "100", "url": "https://www.taobao.com"},
#  {"name": "QQ", "alexa": "101", "url": "https://www.qq.com"},
#  {"name": "Facebook", "alexa": "10", "url": "https://www.facebook.com"},
#  {"name": "知乎", "alexa": "103", "url": "https://www.zhihu.com"},
#  {"name": "Github", "alexa": "109", "url": "https://www.github.com"}
#]
#x = mycol.insert_many(mylist)
# 輸出插入的所有文檔對(duì)應(yīng)的 _id 值
#print(x.inserted_ids)

#插入多條不同id的文檔
mycol2 = mydb["site2"]
mylist2 = [
  {"_id": 1, "name": "RUNOOB", "cn_name": "菜鳥(niǎo)教程"},
  {"_id": 2, "name": "Google", "address": "Google 搜索"},
  {"_id": 3, "name": "Facebook", "address": "臉書(shū)"},
  {"_id": 4, "name": "Taobao", "address": "淘寶"},
  {"_id": 5, "name": "Zhihu", "address": "知乎"}
]
x = mycol2.insert_many(mylist2)
# 輸出插入的所有文檔對(duì)應(yīng)的 _id 值
print(x.inserted_ids)

七、查詢文檔

本節(jié)上個(gè)內(nèi)容有顯示MongoDB查詢文檔的操作,在Pycharm里如何實(shí)現(xiàn)查詢呢?

1.查詢一條數(shù)據(jù)

#查詢一條數(shù)據(jù)
x = mycol.find_one()
print(x)

Pycharm運(yùn)行結(jié)果:

1

2.查詢集合中所有數(shù)據(jù)

find() 方法可以查詢集合中的所有數(shù)據(jù),類似 SQL 中的 SELECT * 操作。

#查詢所有數(shù)據(jù)
for x in mycol.find():
  print(x)

Pycharm運(yùn)行結(jié)果:

1

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

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

除了 _id,你不能在一個(gè)對(duì)象中同時(shí)指定 0 和 1,如果你設(shè)置了一個(gè)字段為 0,則其他都為 1,反之亦然。

不能出現(xiàn)類似這樣的代碼for x in mycol.find({},{ "name": 1, "alexa": 0 }):。

#返回指定字段
for x in mycol.find({},{ "_id": 0, "name": 1, "alexa": 1 }):      #意思是只返回name和alexa,不要id
  print(x)
for x in mycol.find({},{ "alexa": 0 }):      #除了alexa字段,其他都返回
  print(x)

運(yùn)行結(jié)果是:

1

2

4.根據(jù)指定條件查詢

我們可以在 find() 中設(shè)置參數(shù)來(lái)過(guò)濾數(shù)據(jù)。

#根據(jù)指定條件查詢
myquery = {"name": "RUNOOB"}
mydoc = mycol.find(myquery)
for x in mydoc:
  print(x)

運(yùn)行結(jié)果:

1

5.高級(jí)查詢

查詢的條件語(yǔ)句中,我們還可以使用修飾符。

以下實(shí)例用于讀取 name 字段中第一個(gè)字母 ASCII 值大于 “H” 的數(shù)據(jù),大于的修飾符條件為 {“$gt”: “H”} :

#高級(jí)查詢
myquery = { "name": { "$gt": "H" }}
mydoc = mycol.find(myquery)
for x in mydoc:
  print(x)

運(yùn)行結(jié)果:

1

MongoDB中條件操作符有:
(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte

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

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

正則表達(dá)式修飾符只用于搜索字符串的字段。

以下實(shí)例用于讀取 name 字段中第一個(gè)字母為 “R” 的數(shù)據(jù),正則表達(dá)式修飾符條件為 {“$regex”: “^R”} :

$regex為模糊查詢的字符串提供正則表達(dá)式功能。

#使用正則表達(dá)式查詢
myquery = {"name": {"$regex": "^R"}}    #查詢name中以R開(kāi)頭的數(shù)據(jù)
mydoc = mycol.find(myquery)
for x in mydoc:
  print(x)

運(yùn)行結(jié)果:

1

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

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

以下實(shí)例返回 3 條文檔記錄:

#返回指定條數(shù)
myresult = mycol.find().limit(3)     #查詢前三條數(shù)據(jù)
# 輸出結(jié)果
for x in myresult:
  print(x)

1

八、修改文檔

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

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

更新前的數(shù)據(jù)如下:

1

代碼如下:

#修改一條數(shù)據(jù)
myquery = {"alexa": "10000"}    #將alexa的10000的數(shù)據(jù)值改為12345
newvalues = {"$set": {"alexa": "12345"}}
mycol.update_one(myquery, newvalues)
# 輸出修改后的  "sites"  集合
for x in mycol.find():
  print(x)

更新后:

1

update_one() 方法只能修匹配到的第一條記錄,如果要修改所有匹配到的記錄,可以使用 update_many()。

以下實(shí)例將查找所有以 F 開(kāi)頭的 name 字段,并將匹配到所有記錄的 alexa 字段修改為 123:

#修改多條數(shù)據(jù)
myquery = {"name": {"$regex": "^F"}}        #尋找以F開(kāi)頭的name,將其alexa值改為123
newvalues = {"$set": {"alexa": "123"}}
x = mycol.update_many(myquery, newvalues)
print(x.modified_count, "文檔已修改")

更新后:

1

九、排序

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

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

#排序            將alexa以升序排序
mydoc = mycol.find().sort("alexa")
for x in mydoc:
  print(x)

結(jié)果如下:

1

降序排序:

#alexa降序
mydoc = mycol.find().sort("alexa", -1)
for x in mydoc:
  print(x)

結(jié)果如下:

1

十、刪除文檔

1.刪除一個(gè)文檔

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

刪除前的數(shù)據(jù)庫(kù)如圖:

1

#刪除一條數(shù)據(jù)
myquery = { "name": "Taobao" }
mycol.delete_one(myquery)
# 刪除后輸出
for x in mycol.find():
  print(x)

刪除后:

2

2.刪除多個(gè)文檔

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

刪除所有 name 字段中以 F 開(kāi)頭的文檔:

#刪除多條數(shù)據(jù)
myquery = {"name": {"$regex": "^F"}}
x = mycol.delete_many(myquery)
print(x.deleted_count, "個(gè)文檔已刪除")

刪除后:

1

3.刪除集合中的所有文檔

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

#刪除集合中所有文檔
x = mycol.delete_many({})       #mycol = mydb["sites"]連的是sites,所以會(huì)刪除sites里的所有文檔
print(x.deleted_count, "個(gè)文檔已刪除")

刪除后:

1

4.刪除集合

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

#刪除集合
mycol.drop()

1

總代碼有:

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
#新建數(shù)據(jù)庫(kù)
mydb = myclient["runoobdbs"]
#創(chuàng)建集合
mycol = mydb["sites"]
'''
#判斷數(shù)據(jù)庫(kù)是否存在
dblist = myclient.list_database_names()     #list_database_names()獲取數(shù)據(jù)庫(kù)名
# dblist = myclient.database_names()
if "runoobdbs" in dblist:
  print("數(shù)據(jù)庫(kù)已存在!")
#判斷集合是否存在
collist = mydb. list_collection_names()    #獲取集合名
# collist = mydb.collection_names()
if "sites" in collist:   # 判斷 sites 集合是否存在
  print("集合已存在!")
'''
#插入文檔
#mydict = {"name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com"}
#x = mycol.insert_one(mydict)
#print(x)
#print(x.inserted_id)
#插入多個(gè)文檔
#mylist = [
#  {"name": "Taobao", "alexa": "100", "url": "https://www.taobao.com"},
#  {"name": "QQ", "alexa": "101", "url": "https://www.qq.com"},
#  {"name": "Facebook", "alexa": "10", "url": "https://www.facebook.com"},
#  {"name": "知乎", "alexa": "103", "url": "https://www.zhihu.com"},
#  {"name": "Github", "alexa": "109", "url": "https://www.github.com"}
#]
#x = mycol.insert_many(mylist)
# 輸出插入的所有文檔對(duì)應(yīng)的 _id 值
#print(x.inserted_ids)
#插入多條不同id的文檔
#mycol2 = mydb["site2"]
#mylist2 = [
#  {"_id": 1, "name": "RUNOOB", "cn_name": "菜鳥(niǎo)教程"},
#  {"_id": 2, "name": "Google", "address": "Google 搜索"},
#  {"_id": 3, "name": "Facebook", "address": "臉書(shū)"},
#  {"_id": 4, "name": "Taobao", "address": "淘寶"},
#  {"_id": 5, "name": "Zhihu", "address": "知乎"}
#]
#x = mycol2.insert_many(mylist2)
# 輸出插入的所有文檔對(duì)應(yīng)的 _id 值
#print(x.inserted_ids)
#查詢一條數(shù)據(jù)
#x = mycol.find_one()
#print(x)
#查詢所有數(shù)據(jù)
#for x in mycol.find():
#  print(x)
#返回指定字段
#for x in mycol.find({},{ "_id": 0, "name": 1, "alexa": 1 }):      #意思是只返回name和alexa,不要id
#  print(x)
#for x in mycol.find({},{ "alexa": 0 }):      #除了alexa字段,其他都返回
#  print(x)
#根據(jù)指定條件查詢
#myquery = {"name": "RUNOOB"}
#mydoc = mycol.find(myquery)
#for x in mydoc:
#  print(x)
#高級(jí)查詢
#myquery = { "name": { "$gt": "H" }}
#mydoc = mycol.find(myquery)
#for x in mydoc:
#  print(x)
#使用正則表達(dá)式查詢
#myquery = {"name": {"$regex": "^R"}}
#mydoc = mycol.find(myquery)
#for x in mydoc:
#  print(x)
#返回指定條數(shù)
#myresult = mycol.find().limit(3)
# 輸出結(jié)果
#for x in myresult:
#  print(x)
#修改一條數(shù)據(jù)
#myquery = {"alexa": "10000"}     #將alexa的10000的數(shù)據(jù)值改為12345
#newvalues = {"$set": {"alexa": "12345"}}
#mycol.update_one(myquery, newvalues)
# 輸出修改后的  "sites"  集合
#for x in mycol.find():
#  print(x)
#修改多條數(shù)據(jù)
#myquery = {"name": {"$regex": "^F"}}   #尋找以F開(kāi)頭的name,將其alexa值改為123
#newvalues = {"$set": {"alexa": "123"}}
#x = mycol.update_many(myquery, newvalues)
#print(x.modified_count, "文檔已修改")
#排序            將alexa以升序排序
#mydoc = mycol.find().sort("alexa")
#for x in mydoc:
#  print(x)
#alexa降序
#mydoc = mycol.find().sort("alexa", -1)
#for x in mydoc:
#  print(x)
#刪除一條數(shù)據(jù)
#myquery = {"name": "Taobao"}
#mycol.delete_one(myquery)
# 刪除后輸出
#for x in mycol.find():
#  print(x)
#刪除多條數(shù)據(jù)
#myquery = {"name": {"$regex": "^F"}}
#x = mycol.delete_many(myquery)
#print(x.deleted_count, "個(gè)文檔已刪除")
#刪除集合中所有文檔
#x = mycol.delete_many({})
#print(x.deleted_count, "個(gè)文檔已刪除")
#刪除集合
mycol.drop()

總結(jié)

到此這篇關(guān)于Python如何使用pymongo連接MongoDB數(shù)據(jù)庫(kù)并進(jìn)行相關(guān)操作的文章就介紹到這了,更多相關(guān)pymongo連接MongoDB數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論