亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

淺析Python與Mongodb數據庫之間的操作方法

系統 1524 0

MongoDB 是目前最流行的 NoSQL 數據庫之一,使用的數據類型 BSON(類似 JSON)。

1. 安裝Mongodb和pymongo

Mongodb的安裝和配置

Mongodb的安裝教程請網上搜索, 安裝完成后,??? 進行以下配置過程:

1.1 創建目錄, 該目錄為Mongodb數據文件的存放目錄:

*注: 本人使用的不是root用戶, 所以修改目錄的擁有者. *

            
sudo mkdir /data
sudo chown -R python:python /data
mkdir /data/db
          

1.2 分別執行命令:

第一條命令為指定端口和保存路徑, 第二條為運行mongodb數據庫.

            
mongod --port 27017 --dbpath /data/db
mongo --port 27017
          

1.3 安裝pymongo

sudo pip3 install pymongo

2. 連接數據庫、指定數據庫、指定集合、插入數據:

mongodb存儲數據以鍵值形式, 因此在Python中使用字段插入數據.

            
import pymongo
#連接mongodb
client = pymongo.MongoClient('mongodb://localhost:27017/')
#指定數據庫
db = client.test4
#指定集合
collection = db.students
#數據
student1 = {
 'id': '201801',
 'name': 'Jack',
 'age': 20,
 'gender': 'male'
}
student2 = {
 'id': '201802',
 'name': 'Tom',
 'age': 22,
 'gender': 'male'
}
student3 = {
 'id': '201803',
 'name': 'Rose',
 'age': 21,
 'gender': 'female'
}
student4 = {
 'id': '201804',
 'name': 'Mike',
 'age': 20,
 'gender': 'female'
}
student5 = {
 'id': '201805',
 'name': 'Ray',
 'age': 20,
 'gender': 'female'
}
student6 = {
 'id': '201806',
 'name': 'Alan',
 'age': 21,
 'gender': 'male'
}
#插入一條數據
result1 = collection.insert_one(student1)
print(result1)
print(result1.inserted_id)
# #插入多條數據
result2 = collection.insert_many([student2, student3, student4, student5, student6])
print(result2)
print(result2.inserted_ids)
          

運行結果:

insert方法:

5b3a1942971951218d41c02b
[ObjectId('5b3a1942971951218d41c02c'), ObjectId('5b3a1942971951218d41c02d')]

官方推薦:

            
              
5b3a1942971951218d41c02e

              
                
[ObjectId('5b3a1942971951218d41c02f'), ObjectId('5b3a1942971951218d41c030')]
              
            
          

3. 查詢、計數、排序、偏移:

            
import pymongo
from bson.objectid import ObjectId
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client.test4
collection = db.students
#查詢一條數據
print('單條數據','='*50)
result = collection.find_one({'name': 'Jack'})
print(result)
print('多條數據','='*50)
#查詢多條數據
for res in collection.find({'age': {'$mod': [5, 0]}}):
 print(res)
#計數
print('計數','='*50)
count = collection.find({'age': {'$mod': [5, 0]}}).count()
print(count)
#排序
print('排序','='*50)
results = collection.find().sort('name', pymongo.ASCENDING) #升序, pymongo.DESCENDING為降序
print([result['name'] for result in results])
#偏移
print('偏移','='*50)
results = collection.find().sort('name', pymongo.ASCENDING).skip(2) #偏移2位,忽略前兩個數據
print([result['name'] for result in results])
results = collection.find().sort('name', pymongo.ASCENDING).skip(2).limit(2) #只輸出2個數據
print([result['name'] for result in results])
find({‘age': {'$mod': [5, 0]}}): 表示查找年齡取余5余0的值. 還有很多比較符號, 請百度.
          

運行結果:

            
單條數據 ==================================================
{'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 20, 'gender': 'male'}
多條數據 ==================================================
{'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 20, 'gender': 'male'}
{'_id': ObjectId('5b3a1942971951218d41c02e'), 'id': '201804', 'name': 'Mike', 'age': 20, 'gender': 'female'}
{'_id': ObjectId('5b3a1942971951218d41c02f'), 'id': '201805', 'name': 'Ray', 'age': 20, 'gender': 'female'}
計數 ==================================================
3
排序 ==================================================
['Alan', 'Jack', 'Mike', 'Ray', 'Rose', 'Tom']
偏移 ==================================================
['Mike', 'Ray', 'Rose', 'Tom']
['Mike', 'Ray']
          

4. 更新:

4.1? 不使用$set更新數據:

            
import pymongo
from bson.objectid import ObjectId
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client.test4
collection = db.students
#修改
condition = {'name': 'Jack'}
student = collection.find_one(condition) #獲得滿足condition的數據
print('更新前: ', student)
student['age'] = 22 #修改年齡
result = collection.update(condition, student) #將修改后的student替換condition
print('更新后', collection.find_one(condition))
#更新的返回值
print(result) #ok=1代表執行成功, nModified代表影響的條數
          

運行結果:

            
更新前: {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 20, 'gender': 'male'}
更新后 {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 22, 'gender': 'male'}
{'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True}
          

4.2? 使用$set更新數據:

            
import pymongo
from bson.objectid import ObjectId
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client.test4
collection = db.students
#使用$set更新
condition = {'name': 'Jack'}
student = collection.find_one(condition) #獲得滿足condition的數據
print('更新前: ', student)
student['age'] = 23 #修改年齡
result = collection.update(condition, {'$set': student}) #將修改后的student替換condition, $set為重點
print('更新后', collection.find_one(condition))
#更新的返回值
print(result) #ok=1代表執行成功, nModified代表影響的條數
          

運行結果:

            
更新前: {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 22, 'gender': 'male'}
更新后 {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 23, 'gender': 'male'}
{'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True}
          

比較使用和不適用$set更新數據, 發現此時并沒有什么區別.

下面介紹區別所在:

4.3? 區別

            
import pymongo
from bson.objectid import ObjectId
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client.test4
collection = db.students
#使用和不使用$set更新的區別
print('使用: ')
condition = {'name': 'Jack'}
student = collection.find_one(condition) #獲得滿足condition的數據
print('更新前: ', student)
student = {
 'id': '201803',
 'name': 'Jack',
 'age': 20,
 'gender': 'female',
 'mother': "Jack's mother"
}
result = collection.update(condition, {'$set': student}) #將修改后的student替換condition
print('更新后', collection.find_one(condition))
#更新的返回值
print(result) #ok=1代表執行成功, nModified代表影響的條數
#分割線
print()
print('='*20, '分割線', '='*20)
print()
print('不使用: ')
condition = {'name': 'Jack'}
student = collection.find_one(condition) #獲得滿足condition的數據
print('更新前: ', student)
student = {
 'id': '201803',
 'name': 'Jack',
 'age': 20,
 'gender': 'female',
 'father': "Jack's father"
}
result = collection.update(condition, student) #將修改后的student替換condition
print('更新后', collection.find_one(condition))
#更新的返回值
print(result) #ok=1代表執行成功, nModified代表影響的條數
          

運行結果:

使用:

            
更新前: {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 23, 'gender': 'male'}
更新后 {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201803', 'name': 'Jack', 'age': 20, 'gender': 'female', 'mother': "Jack's mother"}
{'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True}
          

==================== 分割線 ====================

            
不使用: 
更新前: {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201803', 'name': 'Jack', 'age': 20, 'gender': 'female', 'mother': "Jack's mother"}
更新后 {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201803', 'name': 'Jack', 'age': 20, 'gender': 'female', 'father': "Jack's father"}
{'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True}
          

分析上面運行結果, 可以發現使用$set時, 若更新數據有原數據沒有的字段, 則將該字段加到原數據上(上例為新增了mother字段), 而不會刪除任何字段. 相反, 若不使用set時, 將從原數據中刪除更新數據沒有的字段, 再加上新增字段(上例為刪除了mother字段, 新增了father字段. 也可以理解為將原數據完全替換為更新數據)

4.4? update_one和update_many的區別:

            
import pymongo
from bson.objectid import ObjectId
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client.test4
collection = db.students
#官方推薦使用
#update_one和update_many的區別
print('update_one: ')
condition = {'age': {'$gt': 20}}
result = collection.update_one(condition, {'$inc': {'age': 1}})
print(result)
print(result.matched_count, result.modified_count)
#分割線
print()
print('='*20, '分割線', '='*20)
print()
print('update_many: ')
condition = {'age': {'$gt': 20}}
result = collection.update_many(condition, {'$inc': {'age': 1}})
print(result)
print(result.matched_count, result.modified_count)
          

運行結果:

            
update_one: 

            
              
1 1
==================== 分割線 ====================
update_many: 

              
                
3 3
12345678910
{‘age': {'$gt': 20}}為查找年齡大于20的, {‘inc': {‘age': 1}}為將年齡+1
              
            
          

5. 刪除:

            
import pymongo
from bson.objectid import ObjectId
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client.test4
collection = db.students
#刪除
result = collection.remove({'name': 'Jack'})
print(result)
#推薦使用
result = collection.delete_one({'age': {'$gt': 20}})
print(result.deleted_count)
result = collection.delete_many({'age': {'$gt': 20}})
print(result.deleted_count)
          

運行結果:

{'ok': 1, 'n': 1}
1
2

6. 其他

除了上述常用的之外, 還包括find_one_and_delete()查找后刪除、find_one_and_replace()查找后替換, 有興趣可以百度深入了解.

總結

以上所述是小編給大家介紹的Python與Mongodb數據庫之間的操作方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 夜色资源网yese321 | 99re热精品视频国产免费 | 久久精品这里只有精品 | 色播久久 | 国产激情视频一区二区三区 | 黄色一级毛片在线观看 | 亚洲第一综合色 | 亚洲欧美日韩中文综合在线不卡 | 亚洲综合一区二区三区 | 日韩美一区二区三区 | 国产高清不卡一区二区三区 | 国产成人精品视频一区二区不卡 | 狠久久| 色老头成人免费视频天天综合 | 亚洲国产精品欧美综合 | 日日噜噜噜夜夜爽爽狠狠图片 | 99j久久精品久久久久久 | 久久中文亚洲国产 | 波多野结衣精品中文字幕 | 国产96精品 | 亚洲国产精品乱码在线观看97 | 中文字幕伊人久久网 | 99热久久精品免费精品 | 九九热国产 | 无遮挡一级毛片视频 | 亚洲精品99久久一区二区三区 | 亚洲美女性视频 | 国产成人亚洲精品91专区高清 | 色午夜在线 | 大咪咪在线 | 亚洲欧美日韩综合在线 | 老司机午夜永久在线观看 | 色久天堂网 | 欧美亚洲大片 | 国内精品欧美久久精品 | 欧美深夜影院 | 久久精品女人天堂 | 日本又黄又爽又色的视频免费 | 伊人精品 | 婷婷色综合久久 | 久久99热只有频精品6不卡 |