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

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

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

一、基本概述

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

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

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

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

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

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

注意:

此時navicat還無法看見新建的數(shù)據(jù)庫,這是因為在 MongoDB 中,數(shù)據(jù)庫只有在內容插入后才會創(chuàng)建!
就是說,數(shù)據(jù)庫創(chuàng)建后要創(chuàng)建集合(數(shù)據(jù)表)并插入一個文檔(記錄),數(shù)據(jù)庫才會真正創(chuàng)建。

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

代碼如下:

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

四、創(chuàng)建集合

代碼如下:

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

五、判斷集合是否存在

代碼如下:

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

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

六、插入文檔

1.插入單個文檔

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

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

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

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

1

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

2

運行后navicat fo rmongodb顯示如下:

3

Pycharm運行第一次結果:

4

第二次運行結果:

5

此時全部代碼有:

import pymongo

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

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

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

#創(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 對象,該對象包含 inserted_id 屬性,它是插入文檔的 id 值。

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

結果是:

1

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

1

3.插入多個文檔

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

代碼如下:

#插入多個文檔
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)
# 輸出插入的所有文檔對應的 _id 值
print(x.inserted_ids)

Pycharm運行結果:

1

navicat顯示如下:

2

也可以使用MongoDB查看。

1

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

4.插入指定 _id 的多個文檔

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

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

Pycharm運行結果:

1

navicat顯示如下:

1

此時全部代碼如下:

import pymongo

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

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

#判斷集合是否存在
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)

#插入多個文檔
#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)
# 輸出插入的所有文檔對應的 _id 值
#print(x.inserted_ids)

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

七、查詢文檔

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

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

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

Pycharm運行結果:

1

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

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

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

Pycharm運行結果:

1

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

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

除了 _id,你不能在一個對象中同時指定 0 和 1,如果你設置了一個字段為 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)

運行結果是:

1

2

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

我們可以在 find() 中設置參數(shù)來過濾數(shù)據(jù)。

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

運行結果:

1

5.高級查詢

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

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

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

運行結果:

1

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

6.使用正則表達式查詢

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

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

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

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

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

運行結果:

1

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

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

以下實例返回 3 條文檔記錄:

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

1

八、修改文檔

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

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

更新前的數(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()。

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

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

更新后:

1

九、排序

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

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

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

結果如下:

1

降序排序:

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

結果如下:

1

十、刪除文檔

1.刪除一個文檔

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

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

1

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

刪除后:

2

2.刪除多個文檔

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

刪除所有 name 字段中以 F 開頭的文檔:

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

刪除后:

1

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

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

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

刪除后:

1

4.刪除集合

我們可以使用 drop() 方法來刪除一個集合。

#刪除集合
mycol.drop()

1

總代碼有:

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
#新建數(shù)據(jù)庫
mydb = myclient["runoobdbs"]
#創(chuàng)建集合
mycol = mydb["sites"]
'''
#判斷數(shù)據(jù)庫是否存在
dblist = myclient.list_database_names()     #list_database_names()獲取數(shù)據(jù)庫名
# dblist = myclient.database_names()
if "runoobdbs" in dblist:
  print("數(shù)據(jù)庫已存在!")
#判斷集合是否存在
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)
#插入多個文檔
#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)
# 輸出插入的所有文檔對應的 _id 值
#print(x.inserted_ids)
#插入多條不同id的文檔
#mycol2 = mydb["site2"]
#mylist2 = [
#  {"_id": 1, "name": "RUNOOB", "cn_name": "菜鳥教程"},
#  {"_id": 2, "name": "Google", "address": "Google 搜索"},
#  {"_id": 3, "name": "Facebook", "address": "臉書"},
#  {"_id": 4, "name": "Taobao", "address": "淘寶"},
#  {"_id": 5, "name": "Zhihu", "address": "知乎"}
#]
#x = mycol2.insert_many(mylist2)
# 輸出插入的所有文檔對應的 _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)
#高級查詢
#myquery = { "name": { "$gt": "H" }}
#mydoc = mycol.find(myquery)
#for x in mydoc:
#  print(x)
#使用正則表達式查詢
#myquery = {"name": {"$regex": "^R"}}
#mydoc = mycol.find(myquery)
#for x in mydoc:
#  print(x)
#返回指定條數(shù)
#myresult = mycol.find().limit(3)
# 輸出結果
#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開頭的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, "個文檔已刪除")
#刪除集合中所有文檔
#x = mycol.delete_many({})
#print(x.deleted_count, "個文檔已刪除")
#刪除集合
mycol.drop()

總結

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

相關文章

最新評論