Python 操作 MongoDB
MongoDB 教程、高級教程:https://www.runoob.com/mongodb/mongodb-tutorial.html
官網:https://www.mongodb.com/
Pymongo?多線程安全。多進程不保證安全
Pymongo 多線程是安全的。多進程不保證是安全的。如果想要 多進程 同時寫入同一個 collection中,需要在每個進程中創建自己的MongoClient對象。
官方文檔:Frequently Asked Questions — PyMongo 3.12.1 documentation
簡單封裝?
# -*- coding: utf-8 -*-import json import pymongoconfig_dict = {'redis': {'host': '','port': '','db': '',},'mongodb': {'host': '127.0.0.1','port': 27017,'username': 'test','password': 'test','auth_db': 'admin'} }class MongoDBOperate(object):def __init__(self, host=None, port=None, username=None, password=None, auth_db=None):super(MongoDBOperate, self).__init__()self.mongodb_host = hostself.mongodb_port = portself.mongodb_username = usernameself.mongodb_password = passwordself.auth_db = auth_dbself.__client = pymongo.MongoClient(host=self.mongodb_host, port=self.mongodb_port)# self.mongodb = self.__client.get_database('admin')self.mongodb_db = self.__client.get_database(self.auth_db)self.mongodb_db.authenticate(name=self.mongodb_username, password=self.mongodb_password)def __del__(self):"""析構函數,釋放資源或者關閉連接:return:"""self.__client.close()passdef insert_one_or_many(self, db_name=None, tb_name=None, data=None):"""插入一條:param db_name: 數據庫名:param tb_name: 集合名(表名):param data: 插入的數據(文檔): dict 類型 或者 list 類型"""if db_name and tb_name and data:mongodb_tb = self.__client.get_database(db_name).get_collection(tb_name)# insert 時如存在會報錯,可以使用 save 方法: self.__get_conn(db_name, tb_name).save(item)# self.__client.get_database(db_name).get_collection(tb_name).insert_one(item)func_write = mongodb_tb.insert_many if isinstance(data, list) else mongodb_tb.savefunc_write(data)else:raise Exception('db_name or tb_name is None')def find_one_or_many(self, db_name=None, tb_name=None, query_condition=None, field_list: list = None,query_one=False):""":param db_name: 數據庫名:param tb_name: 數據表名:param query_condition: 查詢條件:param field_list: 要查詢的字段列表:param query_one: 是否只查詢一條數據:return:"""if db_name and tb_name:mongodb_tb = self.__client.get_database(db_name).get_collection(tb_name)if query_condition:func_find = mongodb_tb.find_one if query_one else mongodb_tb.findquery_field = {field: 1 for field in field_list} if field_list else Noneresult_list = func_find(query_condition, query_field) if field_list else func_find(query_condition)else:# 沒有查詢條件,默認返回所有query_field = {field: 1 for field in field_list} if field_list else Noneresult_list = mongodb_tb.find({}, query_field) if field_list else mongodb_tb.find()for result in result_list:yield resultelse:raise Exception('db_name or tb_name is None')def update_one_or_many(self, db_name=None, tb_name=None, update_condition=None, update_one=True, update_id=None, ):"""Update a single document matching the filter ( update_condition ):param db_name::param tb_name::param update_condition: filter 條件:param update_one::param update_id: 根據 _id 進行更新:return:"""if db_name and tb_name and update_condition:mongodb_tb = self.__client.get_database(db_name).get_collection(tb_name)if update_id:result = mongodb_tb.update_one({'_id': update_id}, update_condition)return resultfunc_update = mongodb_tb.update_one if update_one else mongodb_tb.update_manyresult = func_update(update_condition)else:raise Exception('db_name or tb_name or update_condition is None')return resultdef remove_one_or_many(self, db_name=None, tb_name=None, remove_condition=None, remove_one=True):if db_name and tb_name and remove_condition:mongodb_tb = self.__client.get_database(db_name).get_collection(tb_name)# remove_condition = { "name": "test_test" }func_delete = mongodb_tb.delete_one if remove_one else mongodb_tb.delete_manyfunc_delete(filter=remove_condition)else:raise Exception('db_name or tb_name or remove_condition is None')if __name__ == '__main__':passPython 連接 MongoDB 集群
Python 連接 MongoDB 的驅動為 pymongo, 基于 pymongo 有封裝的 mongoengine,以及基于mongoengine 的 flask_mongoengie。
方法 1:使用?pymongo 連接?MongoDB 集群
示例代碼:
from pymongo import MongoClient, ReadPreferencedef db_conn():client = MongoClient(['192.168.2.188:20000', '192.168.2.190:20000', '192.168.2.191:20000'])db_auth = client.admindb_auth.authenticate('lty', 'lty@100729')db = client.get_database('kafka_test', read_preference=ReadPreference.SECONDARY_PREFERRED)collection = db.ITS_Topic_CommandACKfor x in collection.find():print(x)if __name__ == '__main__':db_conn()pass說明:
示例代碼 2:
建立了一個MongoDB集群,集群名稱 replSet=rs0,包含以下?3 個節點:
172.16.250.233:27017 # SECONDARY 172.16.250.234:27017 # PRIMARY 172.16.250.237:27017 # SECONDARY集群的 test 用戶的密碼為 “123456” ,只能訪問 test 數據庫。另外還有一個 MongoDB 數據庫單獨部署在 172.16.250.238,其 admin 用戶的密碼為 “123456” ,只能訪問 admin 數據庫。MongoDB 集群沒有提供類似MySQL集群和Redis集群中的虛擬IP。在使用的時候需要客戶端連接時指定MongoDB 集群的所有節點。
# coding=utf-8from pymongo import MongoClient# ################################ single mongo ########################################## # ret : ['admin', 'config', 'local'] c = MongoClient(host="172.16.250.238", port=27017) # c = MongoClient(host="mongodb://172.16.250.238:27017") # c = MongoClient(host="mongodb://admin:123456@172.16.250.238:27017") # c = MongoClient(host="mongodb://admin:123456@172.16.250.238:27017/admin")# ################################ mongo cluster ########################################## # ret : ['test'] mongodb_cluster_ip = '172.16.250.233:27017,172.16.250.234:27017,172.16.250.237:27017' c = MongoClient(f'mongodb://test:123456@{mongodb_cluster_ip}/test') # c = MongoClient(f'mongodb://test:123456@{mongodb_cluster_ip}/test?replicaSet=rs0') # c = MongoClient(f'mongodb://test:123456@{mongodb_cluster_ip}/test?readPreference=secondary')print(c.list_database_names())方法 2:使用?mongoengine 連接?MongoDB 集群
示例代碼:
# coding=utf-8from mongoengine import connect from mongoengine import Document from mongoengine import StringField# single mongo connect('admin', host='mongodb://admin:123456@172.16.250.238:27017')# mongo cluster cluster_ip = '172.16.250.233:27017,172.16.250.234:27017,172.16.250.237:27017' # connect('test', host=f'mongodb://test:123456@{cluster_ip}/test?readPreference=secondary')class User(Document): # 類名需要與數據庫中的集合名稱一致name = StringField(required=True, max_length=200)users = User.objects.all() # 返回所有的文檔對象列表for u in users:print("name:", u.name) pass方法 3:使用?flask_mongoengine?連接?MongoDB 集群
示例代碼:
# coding=utf-8 from flask_mongoengine import MongoEngine from flask import Flaskapp = Flask(__name__)# app.config['MONGODB_SETTINGS'] = { # 'host': 'mongodb://admin:123456@172.16.250.238:27017/admin', # }# app.config.from_pyfile('mongo.cfg')# app.config['MONGODB_SETTINGS'] = { # 'db': 'admin', # 'username': 'admin', # 'password': '123456', # 'host': '172.16.250.238', # 'port': 27017 # }app.config['MONGODB_SETTINGS'] = [{'db': 'test','username': 'test','password': '123456','host': '172.16.250.233','port': 27017},{'db': 'test','username': 'test','password': '123456','host': '172.16.250.234','port': 27017}, {'db': 'test','username': 'test','password': '123456','host': '172.16.250.237','port': 27017} ]db = MongoEngine(app)class User(db.Document):name = db.StringField(required=True, max_length=50)users = User.objects.all() # 返回所有的文檔對象列表for u in users:print("name:", u.name)配置文件 mongo.cfg 格式如下:
MONGODB_SETTINGS = {'host': 'mongodb://admin:123456@172.16.250.238:27017/admin', }Python 操作 mongodb
首先引入包:pip install pymongo
需要用到如下對象:MongoClient 對象:用于與 MongoDB服務器建立連接client = MongoClient('主機ip',端口)DataBase 對象:對應著MongoDB中的數據庫db = client.數據庫名稱Collection 對象:對應著MongoDB中的集合col = db.集合名稱Cursor 對象:查詢方法find()返回的對象,用于進行多行數據的遍歷當調用集合對象的find()方法時,會返回Cursor對象結合for...in...遍歷cursor對象主要方法:insert_one:? ?加入一條文檔對象insert_many:加入多條文檔對象find_one:? ? ?查找一條文檔對象find:? ? ? ? ? ? 查找多條文檔對象update_one:? ?更新一條文檔對象update_many:更新多條文檔對象delete_one:? ?刪除一條文檔對象delete_many:刪除多條文檔對象插入方法:insert_one()? ? ?:傳入一個字典,表示插入一個文檔insert_many()? :傳入一個列表,列表的元素為字典,插入多條文檔mongodb 的條件操作符
# (>) 大于 - $gt # (<) 小于 - $lt # (>=) 大于等于 - $gte # (<= ) 小于等于 - $lte# 例:查詢集合中 age 大于 25 的所有記錄 for i in my_set.find({"age":{"$gt":25}}):print(i)type(判斷類型)# 類型隊對照列表 # Double 1 # String 2 # Object 3 # Array 4 # Binary data 5 # Undefined 6 已廢棄 # Object id 7 # Boolean 8 # Date 9 # Null 10 # Regular Expression 11 # JavaScript 13 # Symbol 14 # JavaScript (with scope) 15 # 32-bit integer 16 # Timestamp 17 # 64-bit integer 18 # Min key 255 Query with -1. # Max key 127 # 找出 name 的類型是 String 的 for i in my_set.find({'name':{'$type':2}}):print(i)排序:在MongoDB中使用sort()方法對數據進行排序,sort()方法可以通過參數指定排序的字段,使用 1 和 -1 來指定排序的方式,其中 1 為升序,-1為降序。for i in my_set.find().sort([("age",1)]):print(i)limit 和 skip# limit()方法用來讀取指定數量的數據 # skip()方法用來跳過指定數量的數據 # 下面表示跳過兩條數據后讀取6條 for i in my_set.find().skip(2).limit(6):print(i)IN 操作 # 找出 age 是 20、30、35 的數據 for i in my_set.find({"age":{"$in":(20,30,35)}}):print(i)OR 操作 #找出age是20或35的記錄 for i in my_set.find({"$or":[{"age":20},{"age":35}]}):print(i)all 操作 ''' dic = {"name":"lisi","age":18,"li":[1,2,3]} dic2 = {"name":"zhangsan","age":18,"li":[1,2,3,4,5,6]}my_set.insert(dic) my_set.insert(dic2)''' for i in my_set.find({'li':{'$all':[1,2,3,4]}}):print(i)# 查看是否包含全部條件 # 輸出:{'_id': ObjectId('58c503b94fc9d44624f7b108'), 'name': 'zhangsan', 'age': 18, 'li': [1, 2, 3, 4, 5, 6]}push / pushAllmy_set.update({'name':"lisi"}, {'$push':{'li':4}}) for i in my_set.find({'name':"lisi"}):print(i) # 輸出:{'li': [1, 2, 3, 4], '_id': ObjectId('58c50d784fc9d44ad8f2e803'), 'age': 18, 'name': 'lisi'}my_set.update({'name':"lisi"}, {'$pushAll':{'li':[4,5]}}) for i in my_set.find({'name':"lisi"}):print(i) # 輸出:{'li': [1, 2, 3, 4, 4, 5], 'name': 'lisi', 'age': 18, '_id': ObjectId('58c50d784fc9d44ad8f2e803')}pop/pull/pullAll# pop # 移除最后一個元素(-1為移除第一個) my_set.update({'name':"lisi"}, {'$pop':{'li':1}}) for i in my_set.find({'name':"lisi"}):print(i) # 輸出:{'_id': ObjectId('58c50d784fc9d44ad8f2e803'), 'age': 18, 'name': 'lisi', 'li': [1, 2, 3, 4, 4]}# pull (按值移除) # 移除3 my_set.update({'name':"lisi"}, {'$pop':{'li':3}})# pullAll (移除全部符合條件的) my_set.update({'name':"lisi"}, {'$pullAll':{'li':[1,2,3]}}) for i in my_set.find({'name':"lisi"}):print(i) # 輸出:{'name': 'lisi', '_id': ObjectId('58c50d784fc9d44ad8f2e803'), 'li': [4, 4], 'age': 18}插入:
insert() insert 插入一個列表多條數據不用遍歷,效率高 insert_one() 傳入一個字典,表示插入一個文檔 insert_many() 傳入一個列表,列表的元素為字典,插入多條文檔save() save 需要遍歷列表,一個個插入。save 插入數據時,沒有則插入,有則覆蓋replace_one() save 已經被廢棄. 使用 insert_one 或者 replace_one 代替 savedb.collection.replaceOne(<filter>, # 過濾的條件<replacement>, # 替換的 document{upsert: <boolean>, # 當 upsert 為 true 時:如果沒有匹配的則插入。如果有匹配的則替換。writeConcern: <document>} )db.restaurant.replaceOne({name:"Pizza Rat's Pizzaria"},{"_id":4, name" : "Pizza Rat's Pizzaria", "Borough" : "Manhattan", "violations" : 8 },{upsert:true} )示例代碼:
from pymongo import * ''' 插入方法:insert_one() 傳入一個字典,表示插入一個文檔insert_many() 傳入一個列表,列表的元素為字典,插入多條文檔 ''' def insert():try:# 1 創建連接對象client = MongoClient(host="localhost", port=27017)# 2 獲取數據庫,# 如果這個數據庫不存在,就在內存中虛擬創建# 當在庫里創建集合的時候,就會在物理真實創建這個數據庫db = client.demo # 使用 demo 數據庫# 向 stu 集合插入數據# 插入一條db.stu.insert_one({"name": "zs", "age": 20})# 插入多條db.stu.insert_many([{"name": 1}, {"name": 2}])except Exception as e:print(e)if __name__ == '__main__':insert()示例 2:
from pymongo import MongoClientdb = MongoClient(host='127.0.0.1', port=27017) my_set = db.get_database('test').get_collection('test') my_set.insert({"name": "king", "age": 18}) # 或 my_set.save({"name": "king", "age": 18})# 插入多條 # 添加多條數據到集合中 users = [{"name": "king", "age": 18}, {"name": "lisi", "age": 20} ] my_set.insert(users) # 或 my_set.save(users)查詢:
- find_one():返回滿足條件的文檔集中第一條數據,類型為字典。如果沒有查詢結果返回None。
- find():返回滿足條件的所有文檔,類型為Cursor對象,可以使用 for...in 遍歷,每項為字典對象。如果沒有查詢結果返一個空的Cursor對象。
db = pymongo.MongoClient()
db.get_database(db_name).get_collection(tb_name).find({}, {'_id': 1})
db[db_name][tb_name].find({'v_tag': {'$exists': False}},{'_id':1})
db[db_name][tb_name].find({'likes':0,'archive_view':0,'article_view':0})
示例代碼:
from pymongo import * ''' 查詢方法:find_one()返回滿足條件的文檔集中第一條數據,類型為字典如果沒有查詢結果返回None方法find()返回滿足條件的所有文檔,類型為Cursor對象,可以使用for...in遍歷,每項為字典對象如果沒有查詢結果返一個空的Cursor對象 ''' def select():try:# 1 創建連接對象client = MongoClient(host="localhost", port=27017)# 2 獲取數據庫,# 如果這個數據庫不存在,就在內存中虛擬創建# 當在庫里創建集合的時候,就會在物理真實創建這個數據庫db = client.demo # 使用demo數據庫# 從stu查詢數據# 查詢一條,返回一個字典,如果沒有結果返回Noneres = db.stu.find_one({"age": 18})print(res)# 查詢全部結果,返回一個Cursor可迭代對象,每一個元素是字典# 如果沒有查詢結果會返回一個空的Cursor對象res = db.stu.find({"age": {"$gt": 18}})print(res)except Exception as e:print(e)if __name__ == '__main__':select()示例 2:
from pymongo import MongoClientdb = MongoClient(host='127.0.0.1', port=27017) my_set = db.get_database('test').get_collection('test')# 查詢全部 for i in my_set.find():print(i)# 查詢 name=king 的 for i in my_set.find({"name": "king"}):print(i) print(my_set.find_one({"name": "king"}))更新:
? ? update_one()? ? :修改滿足條件的文檔集中的第一條文檔update_many() :修改滿足條件的文檔集中的所有文檔注意:使用 $set 操作符修改特定屬性的值,否則會修改整個文檔my_set.update(<query>, # 查詢條件<update>, # update 的對象和一些更新的操作符{upsert: <boolean>, # 如果不存在update的記錄,是否插入multi: <boolean>, # 可選,mongodb 默認是 false, 只更新找到的第一條記錄writeConcern: <document> # 可選,拋出異常的級別。} )示例代碼:
from pymongo import * ''' 修改方法:update_one()修改滿足條件的文檔集中的第一條文檔update_many()修改滿足條件的文檔集中的所有文檔注意:使用$set操作符修改特定屬性的值,否則會修改整個文檔 ''' def update():try:# 1 創建連接對象client = MongoClient(host="localhost", port=27017)# 2 獲取數據庫,# 如果這個數據庫不存在,就在內存中虛擬創建# 當在庫里創建集合的時候,就會在物理真實創建這個數據庫db = client.demo # 使用demo數據庫# 修改數據# 修改第一條符合條件的數據,傳入條件和修改結果db.stu.update_one({"age": 18},{"$set": {"age": 100}}) # 把年齡是18的第一條年齡改成100# 所有符合條件數據都修改# db.stu.update_many({"age": 18},{"$set": {"age": 100}}) # 年齡18的所有數據年齡改成100except Exception as e:print(e)if __name__ == '__main__':update()示例 2:
from pymongo import MongoClientdb = MongoClient(host='127.0.0.1', port=27017) my_set = db.get_database('test').get_collection('test')# 把上面插入數據的 age 改為 20 my_set.update({"name": "king"}, {'$set': {"age": 20}} )update_condition = {'$set': {'v_tag': 'test', 'v_stat': 'test'}}
update_one({'_id': v_id}, update_condition)
刪除:
? ? delete_one()? ? :刪除滿足條件的文檔集中第一條文檔delete_many() :刪除滿足條件的所有文檔注意:使用 $set 操作符修改特定屬性的值,否則會修改整個文檔my_set.remove(<query>, #(可選)刪除的文檔的條件{justOne: <boolean>, #(可選)如果設為 true 或 1,則只刪除一個文檔writeConcern: <document> #(可選)拋出異常的級別} )示例代碼:
from pymongo import * ''' 刪除方法:delete_one()刪除滿足條件的文檔集中第一條文檔delete_many()刪除滿足條件的所有文檔注意:使用$set操作符修改特定屬性的值,否則會修改整個文檔 ''' def delete():try:# 1 創建連接對象client = MongoClient(host="localhost", port=27017)# 2 獲取數據庫,# 如果這個數據庫不存在,就在內存中虛擬創建# 當在庫里創建集合的時候,就會在物理真實創建這個數據庫db = client.demo # 使用demo數據庫# 修改數據# 修改第一條符合條件的文檔刪除db.stu.delete_one({"age": 18}) # 把年齡是18的第一條文檔刪除# 所有符合條件數據都刪除db.stu.delete_many({"age": 18}) # 年齡18的所有文檔刪除except Exception as e:print(e)if __name__ == '__main__':delete()示例 2:
from pymongo import MongoClientdb = MongoClient(host='127.0.0.1', port=27017) my_set = db.get_database('test').get_collection('test')# 刪除 name=king 的全部記錄 my_set.remove({'name': 'king'})# 刪除name=king的某個id的記錄 t_id = my_set.find_one({"name":"king"})["_id"] my_set.remove(t_id)# 刪除集合里的所有記錄 db.users.remove()案例:
? ? ? ? 使用 python 向集合 t3 中插入1000 條文檔,文檔的屬性包括 _id、name
?? ? ? ?_id 的值為 0、1、2、3...999。name 的值為 'py0'、'py1'...
? ? ? ? 查詢顯示出 _id 為 100 的整倍數的文檔,如 100、200、300...,并將 name 輸出
示例代碼:
import pymongo if __name__ == '__main__':try:# 1 獲得連接對象client = pymongo.MongoClient(host="localhost", port=27017)# 2 獲取數據庫db = client.demo# 3 執行業務邏輯 數據庫操作# 插入1000條數據for id in range(0,1000):db.t3.insert_one({"_id": id, "name": "py%s"% id})# 取出符合條件的數據match = {"$where": "function(){return this._id%100 == 0 }",}res = db.t3.find(match, {"_id": 0, "name": 1})for info in res:print(info)except Exception as e:print(e)示例代碼:
import pymongo from pymongo import MongoClientclient = MongoClient('localhost',27017) #client = MongoClient('mongodb://localhost:27017')# 訪問數據庫。當前所使用的數據庫test的users db = client.test users = db.users #或者db = client['users']# 插入文檔。文檔就是一行,集合就是一個表。 # 一個insert_one() user1 = {"name":"li8","age":8} rs = users.insert_one(user1) print('one insert:{0}'.format(rs.inserted_id))# 多個 insert_many() user2 = {"name":"li9","age":9} user3 = {"name":"li10","age":10} user4 = {"name":"li11","age":11} user5 = {"name":"li12","age":12} new_result = users.insert_many([user2, user3, user4, user5]) print('Multiple users: {0}'.format(new_result.inserted_ids))# 檢索文檔 # find_one() 查詢一個結果。 usertmp = users.find_one({"age":33}) print(usertmp)# find() 查詢多個結果。 result = users.find({'age': 33}) for tmp in result:print(tmp)# 高級查詢 result = users.find({'age':{"$lt":30}}).sort("name") for tmp in result:print(tmp)# 統計數量 print(users.count())# 加索引 from pymongo import ASCENDING, DESCENDING print(users.create_index([("age", DESCENDING), ("name", ASCENDING)]))# 數據導出 mongoexport -d test -c users --csv -f name,age -o e:\python\users.csv多級 路徑 元素操作
先插入一條數據 dic = {"name": "zhangsan","age": 18,"contact": {"email": "1234567@qq.com","iphone": "11223344"} } my_set.insert(dic)# 多級目錄用 "." 連接 for i in my_set.find({"contact.iphone":"11223344"}):print(i) # 輸出:{'name': 'zhangsan', '_id': ObjectId('58c4f99c4fc9d42e0022c3b6'), 'age': 18, 'contact': {'email': '1234567@qq.com', 'iphone': '11223344'}}result = my_set.find_one({"contact.iphone":"11223344"}) print(result["contact"]["email"]) # 輸出:1234567@qq.com# 多級路徑下修改操作 result = my_set.update({"contact.iphone":"11223344"},{"$set":{"contact.email":"9999999@qq.com"}}) result1 = my_set.find_one({"contact.iphone":"11223344"}) print(result1["contact"]["email"]) # 輸出:9999999@qq.com還可以對數組用索引操作 dic = {"name": "lisi","age": 18,"contact": [{"email": "111111@qq.com", "iphone": "111"},{"email": "222222@qq.com", "iphone": "222"}] } my_set.insert(dic)# 查詢 result1 = my_set.find_one({"contact.1.iphone":"222"}) print(result1) # 輸出:{'age': 18, '_id': ObjectId('58c4ff574fc9d43844423db2'), 'name': 'lisi', 'contact': [{'iphone': '111', 'email': '111111@qq.com'}, {'iphone': '222', 'email': '222222@qq.com'}]}# 修改 result = my_set.update({"contact.1.iphone":"222"},{"$set":{"contact.1.email":"222222@qq.com"}}) print(result1["contact"][1]["email"]) # 輸出:222222@qq.com示例代碼 :
#!/usr/bin/env python # -*- coding:utf-8 -*- from pymongo import MongoClientsettings = {"ip":'192.168.0.113', # ip"port":27017, # 端口"db_name" : "mydb", # 數據庫名字"set_name" : "test_set" # 集合名字 }class MyMongoDB(object):def __init__(self):try:self.conn = MongoClient(settings["ip"], settings["port"])except Exception as e:print(e)self.db = self.conn[settings["db_name"]]self.my_set = self.db[settings["set_name"]]def insert(self,dic):print("inser...")self.my_set.insert(dic)def update(self,dic,newdic):print("update...")self.my_set.update(dic,newdic)def delete(self,dic):print("delete...")self.my_set.remove(dic)def db_find(self,dic):print("find...")data = self.my_set.find(dic)for result in data:print(result["name"],result["age"])def main():dic={"name":"zhangsan","age":18}mongo = MyMongoDB()mongo.insert(dic)mongo.db_find({"name":"zhangsan"})mongo.update({"name":"zhangsan"}, {"$set":{"age":"25"}})mongo.db_find({"name":"zhangsan"})mongo.delete({"name":"zhangsan"})mongo.db_find({"name":"zhangsan"})if __name__ == "__main__":main()示例代碼 :
# encoding:utf=8 import pymongoconnection = pymongo.Connection('127.0.0.1', 27017)db = connection.my_db # 選擇 my_db 庫 tb = db.my_set # 使用 my_set 集合# 添加單條數據到集合中 user = {"name": "king", "age": "23"} tb.insert(user) # 添加數據 tb.save(user) # 添加數據# 同時添加多條數據到集合中 users = [{"name": "king_1", "age": "23"},{"name": "king_2", "age": "20"} ] tb.insert(users) # 添加數據 tb.save(users) # 添加數據# 刪除命令如下: tb.remove({"name": "king_1"})# 修改命令如下: # tb.update(xxxx)# 查詢命令如下: # 查詢單條記錄 print(tb.find_one())# 查詢所有記錄 for data in tb.find():print(data)# 查詢此集合中數據條數 print(tb.count())# 簡單參數查詢 for data in tb.find({"name": "1"}):print(data)# 使用find_one獲取一條記錄 print(tb.find_one({"name": "1"}))示例代碼 :
# -*-coding:utf8-*- import pymongoconn = pymongo.MongoClient() tdb = conn.t_db ttb = tdb.t_tbdata_1 = {'name': '孫悟空', 'age': 108000, 'skill': '讓你們被猴打過'} data_2 = {'name': '玉皇大帝', 'age': 36000, 'skill': 'creat anything', 'other': 'fuck thank you'} data_3 = {'name': '如來', 'age': 'unknown', 'other': '送你上西天'} ttb.insert(data_1) ttb.insert(data_2) ttb.insert(data_3) ttb.remove({'name': '孫悟空'}) print('操作數據庫完成!')總結
以上是生活随笔為你收集整理的Python 操作 MongoDB的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dom4j完整教程~DOM4J简介
- 下一篇: Python爬取大量数据时防止被封IP