您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python非关系型数据库存储——MongoDB 的储存

bubuko 2022/1/25 19:39:42 python 字数 5491 阅读 1041 来源 http://www.bubuko.com/infolist-5-1.html

MongoDB是一个基于分布式文件存储的开源数据库系统,内容储存类似于JSON对象,它的字段值可以包含其他文档、数组及文档数组。下面介绍一点基本操作。 1.安装 首先需要安装MongoDB并启动了服务,再安装PyMongo库。对此,网上有很多教程,在这里推荐一个,里面也有快速下载的地址,点击这里. ...

MongoDB是一个基于分布式文件存储的开源数据库系统,内容储存类似于JSON对象,它的字段值可以包含其他文档、数组及文档数组。下面介绍一点基本操作。

1.安装

首先需要安装MongoDB并启动了服务,再安装PyMongo库。对此,网上有很多教程,在这里推荐一个,里面也有快速下载的地址,点击这里.

2.连接MongoDB

我们使用MongoClient连接MongoDB,常规使用传入MongoDB的IP及端口即可,其中第一个参数为地址host,第二个参数为端口port(不传递参数时默认为27017),例如:

import pymongo
client = pymongo.MongoClient(host="localhost", port=27017)

#另一种传递参数的方法,可以起到同样的连接效果
client = pymongo.MongoClient(‘mongodb://localhost:27017/‘)

3.指定数据库

MongoDB可以建立多个数据库,而我们操作时需要指定某个数据库,以test数据库为例:

db = client.test

#同样给出另一种指定方法
db = client[‘test‘]

4.指定集合

MongoDB的每个数据库下包含许多集合,下一步需要制定要操作的集合,这里指定一个集合名称为student,下面给出声明对象的方法:

collection = db.students

#同样给出另一种指定方法
collection = db[‘student‘]

5.插入数据

指定完数据库、集合后,我们就可以进行插入数据。这里指定好学生的学号,姓名,年龄后,并调用collection的insert()方法插入数据:

students = {
    ‘id‘: ‘20200220‘,
    ‘name‘: ‘Jack‘,
    ‘age‘: 0
}
result = collection.insert(students)
print(result)

#打印结果:5ef02e5471ebfbf623a58267

我们也可以同时插入多条数据,每条数据其实都有一个_id属性来唯一标识。如果内有显式指明该属性,MongoDB会自动产生一个ObjectId类型的_id属性,而insert()方法在执行后返回_id值,因此上面输出的是一串看似乱码的东西。而同时插入多条数据,只需要以列表的方式传递即可,如:

students1 = {
    ‘id‘: ‘20200220‘,
    ‘name‘: ‘Jack‘,
    ‘age‘: 0
}

students2 = {
    ‘id‘: ‘20200221‘,
    ‘name‘: ‘Mark‘,
    ‘age‘: 1
}
result = collection.insert([students1,students2])
print(result)

#打印结果:[ObjectId(‘5ef038b054baeccd456a6f09‘), ObjectId(‘5ef038b054baeccd456a6f0a‘)]

不过现在更推荐使用insert_one()和insert_many()方法分别插入一条或多条记录,简要示例:

students = {
    ‘id‘: ‘20200220‘,
    ‘name‘: ‘Jack‘,
    ‘age‘: 0
}
result = collection.insert_one(students)
print(result)
print(result.inserted_id)

#打印结果:
#   <pymongo.results.InsertOneResult object at 0x000002AFE4813388>
#	5ef039f36c1a31069d663a65

这里与上面不同的地方就是这次返回的是InsertOneResult对象,我们可以调用inserted_id属性获取_id。而对于insert_many()方法依然是与上面类似的方法,返回的是InsertManyResult,调用inserted_ids属性获取_id。

6.查询

插入数据后我们需要利用find_one()或find()方法进行查询,其中find_one()查询的是单个结果,find()则是返回一个生成器对象,我们也可以根据ObjectId来查询,此时需要使用bson苦衷的objectid,如果查找结果不存在则返回None。对于查找多条数据的查找则使用find()方法。

from bson.objectid import ObjectId

result = collection.find_one({‘name‘: "Jack"})
print(type(result))
print(result)

#打印结果:
#	<class ‘dict‘>
#	{‘_id‘: ObjectId(‘5ef02e5471ebfbf623a58267‘), ‘id‘: ‘20200220‘, ‘name‘: ‘Jack‘, ‘age‘: 0}

result = collection.find_one({‘_id‘: ObjectId(‘5ef02e5471ebfbf623a58267‘)})
print(result)

#打印结果:
#	{‘_id‘: ObjectId(‘5ef02e5471ebfbf623a58267‘), ‘id‘: ‘20200220‘, ‘name‘: ‘Jack‘, ‘age‘: 0}

results = collection.find({‘age‘: 1})
print(results)
for result in results:
    print(result)
#打印结果:
#	<pymongo.cursor.Cursor object at 0x0000017C433C0248>
#	{‘_id‘: ObjectId(‘5ef04a3f08c5ff91cf08d6ea‘), ‘id‘: ‘20200220‘, ‘name‘: ‘Jack‘, ‘age‘: 1}
#	{‘_id‘: ObjectId(‘5ef04a3f08c5ff91cf08d6eb‘), ‘id‘: ‘20200221‘, ‘name‘: ‘Mark‘, ‘age‘: 1}    

7.计数

这个数据库存储也有数据条数计数的功能,使用count()方法,可以统计所有数据条数,或某一特定条件的数据:

count = collection.find().count()
print(count)

#指定某一数据计数
count = collection.find({‘age‘: 1}).count()
print(count)

8.排序

排序时调用sort()方法,并在其中传入排序的字段升降序标志即可。

results = collection.find().sort(‘name‘, pymongo.ASCENDING)
print([result[‘name‘] for result in results])

此时我们采用的是pymogo.ASCENDING指定升序。降序可以传入pymogo.DESCENDING。

9.偏移

所谓偏移就是定向取出数据的方法,使用skip()方法偏移取出位置,如偏移2,便从第三个数据开始取出,同时再加上limit()方法指定要取出的结果个数,如:

results = collection.find().sort(‘name‘, pymongo.ASCENDING).skip(2).limit(2)
print([result[‘name‘] for result in results])

此地方注意使用的limit()方法限制了输出量,因为前面实例我并没有给出许多数据量,此地方仅强调方法。

10.更新

我们使用update()方法进行数据更新,只要在使用时指定更新的条件和更新的数据即可。例如在这个地方更新name为Jack的数据的年龄,先找出,再进行修改,最后使用update()方法将修改后的数据传入数据库。

condition = {‘name‘: ‘Jack‘}
student = collection.find_one(condition)
student[‘age‘] = 20
result = collection.update(comdition,student)
print(result)

#运行结果:
#	{‘n‘: 1, ‘nModified‘: 1, ‘ok‘: 1.0, ‘updatedExisting‘: True}

# result = collection.update(comdition,{‘$set‘: student})

我们由此得知返回时字典形式,OK代表执行成功,nModified代表影响的数据条数。
最后又给出一个方法,此方法使用 $ set操作符可以只更新student字典内存在的字段。如果原先还有其他字段则不会更新也不会删除,如果不用此操作符的话,则会把之前的数据全部用student字典替换:如果原本存在其他字段,也会被删除。按实战情况选择更新方法。
与上面一样,这个方法官方不推荐使用,使用update_one()方法和update_many()方法,用法更为严谨,且后面的参数均需要使用$set操作符指定所要更新的键名,两者区别仅限查找更新时匹配的数据数量。

11.删除

删除数据直接使用remove()方法,此时会把所有符合条件的数据进行删除。当然由于版本的更新,更推荐使用delete_one()和delete_many()方法,方法都入上面同理。给出实例:

result = collection.remove({‘name‘: "Jack"})

python非关系型数据库存储——MongoDB 的储存

原文:https://www.cnblogs.com/PAFF/p/13181058.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶