博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pymongo 操作
阅读量:6403 次
发布时间:2019-06-23

本文共 7625 字,大约阅读时间需要 25 分钟。

python 操作 mongoDB

模块

pymongo

安装方法

sudo pip3 install pymongo

操作步骤

1. 创建数据库连接对象

conn = pymonge.MomgoClient("localhost",27017)

2. 生成操作的数据库对象

db = conn.stu

3. 生成集合对象

myset = db.class0

4. 通过 集合对象 调用结构完成数据操作

['_BaseObject__codec_options', '_BaseObject__read_concern', '_BaseObject__read_preference', '_BaseObject__write_concern', '_Collection__create', '_Collection__create_index', '_Collection__database', '_Collection__find_and_modify', '_Collection__full_name', '_Collection__name', '_Collection__write_response_codec_options', '__call__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_command', '_count', '_delete', '_insert', '_insert_one', '_legacy_write', '_socket_for_primary_reads', '_socket_for_reads', '_socket_for_writes', '_update', 'aggregate', 'bulk_write', 'codec_options', 'count', 'create_index', 'create_indexes', 'database', 'delete_many', 'delete_one', 'distinct', 'drop', 'drop_index', 'drop_indexes', 'ensure_index', 'find', 'find_and_modify', 'find_one', 'find_one_and_delete', 'find_one_and_replace', 'find_one_and_update', 'full_name', 'group', 'index_information', 'initialize_ordered_bulk_op', 'initialize_unordered_bulk_op', 'inline_map_reduce', 'insert', 'insert_many', 'insert_one', 'list_indexes', 'map_reduce', 'name', 'next', 'options', 'parallel_scan', 'read_concern', 'read_preference', 'reindex', 'remove', 'rename', 'replace_one', 'save', 'update', 'update_many', 'update_one', 'with_options', 'write_concern']
集合对象内的所有方法

5. 关闭数据库连接

db.close()

数据操作

插入文档

insert_many     插入多条insert_one      插入一条insert          插入一条或多条save            保存文档

实例

myset.insert_one({
"name":"张铁林","King":"乾隆"}) myset.insert_many([{
"name":"张国立","King":"康熙"}, {
"name":"陈道明","King":"康熙"}]) myset.insert({
"name":"唐国强","King":"雍正"})myset.insert([{
"name":"陈建斌","King":"雍正"}, {
"_id":1, "name":"吴奇隆","King":"四爷"}]) myset.save({
"_id":1,"name":"聂远","King":"乾隆"})

查找文档

find        查找所有find_one    查找首个

find

find(query,field)

参数形式  同 mongoshell 中的 find

返回值   游标对象

对比 mongoDB 的语句

  所有的操作符加上引号,作为字符串形式

  true/false/null 改成 True/False/None

实例

cursor = myset.find({
"name":{
"$exists":True}},{
"_id":0})for i in cursor: # print(i) print(i["name"],"--",i["King"])

cursor 对象属性函数

cursor 本质为返回的文档集合的序列, 同 mongoDB 一样可以继续调用其他的精确筛选方法

next()      获取下一个文档limit()     获取前几条文档skip()      跳过几条count()     计数sort()      排序 * sort 的参数发生了变化 sort([(域名,1/-1),(),()...])* limit,sort,skip 使用时, 必须保证游标在最开始的位置

 实例

# for i in cursor.limit(3): # for i in cursor.skip(3): # for i in cursor.sort([("name",1),("age",-1)]): for i in cursor.sort([("name",1)]):     print(i)

find_one

find_one(query,field)

功能  查找首个符合条件的文档

参数  同 find

返回值  返回字典(只查到首条, 因此返回数据也是单数据, 即 字典)

实例

dic = {
"$or":[{
"King":"乾隆"},{
"name":"陈道明"}]}d = myset.find_one(dic,{
"_id":0})print(d)

修改操作

update_one      修改一个update_many     修改多个update          修改一个或多个

实例

myset.update_many({
"King":"康熙"},{
"$set":{
"king_name":"玄烨"}})myset.update_one({
"King":"雍正"},{
"$set":{
"king_name":"忘了名字"}})myset.update_one({
"name":"郑少秋"},{
"$set":{
"King":"乾隆"}},upsert=True)myset.update({
"King":"乾隆"},{
"$set":{
"king_name":"弘历"}})myset.update({
"King":"乾隆"},{
"$set":{
"king_name":"弘历"}},multi=True)

删除操作

delete_one      删除一个delete_many     删除多个remove          删除一个或多个

实例

myset.delete_one({
"King":"康熙"})myset.delete_many({
"King":"雍正"})myset.remove({
"king_name":{
"$exists":False}})myset.remove({
"king_name":None},multi=True)

复合操作

find_one_and_updatefind_one_and_delete

实例

data = myset.find_one_and_delete({
"name":"张铁林"})print(data)

文档操作整体实例

from pymongo import MongoClient# 创建数据库链接conn = MongoClient("localhost",27017)# 创建数据库对象db = conn.stu# db = conn["stu"]# 生成集合对象myset = db.class0# myset = db["class0"]# 创建集合对象myset = db.class4# 数据操作# -----------------------insert----------------------# myset.insert_one({"name":"张铁林","King":"乾隆"})# myset.insert_many([{"name":"张国立","King":"康熙"},\    #  {"name":"陈道明","King":"康熙"}])# myset.insert({"name":"唐国强","King":"雍正"})# myset.insert([{"name":"陈建斌","King":"雍正"},\    # {"_id":1, "name":"吴奇隆","King":"四爷"}])# myset.save({"_id":1,"name":"聂远","King":"乾隆"})#  ----------------------find-----------------------# cursor = myset.find({"name":{"$exists":True}},{"_id":0})# print(cursor.next()) # 打印下一个文档# for i in cursor:    # print(i)    # print(i["name"],"--",i["King"])# 所有的操作符加上引号,作为字符串形式# true/false/null 改成 True/False/None# for i in cursor.limit(3):# for i in cursor.skip(3):# for i in cursor.sort([("name",1),("age",-1)]):# for i in cursor.sort([("name",1)]):    # print(i)# limit,sort,skip 使用时, 必须保证游标在最开始的位置# dic = {"$or":[{"King":"乾隆"},{"name":"陈道明"}]}# d = myset.find_one(dic,{"_id":0})# print(d)#  ----------------------update-----------------------# myset.update_many({"King":"康熙"},{"$set":{"king_name":"玄烨"}})# myset.update_one({"King":"雍正"},{"$set":{"king_name":"忘了名字"}})# myset.update_one({"name":"郑少秋"},{"$set":{"King":"乾隆"}},upsert=True)# myset.update({"King":"乾隆"},{"$set":{"king_name":"弘历"}})# myset.update({"King":"乾隆"},{"$set":{"king_name":"弘历"}},multi=True)# ------------------------delete----------------------# myset.delete_one({"King":"康熙"})# myset.delete_many({"King":"雍正"})# myset.remove({"king_name":{"$exists":False}})# myset.remove({"king_name":None},multi=True)# ------------------------复合操作----------------------# data = myset.find_one_and_delete({"name":"张铁林"})# print(data)# 关闭链接conn.close()

索引操作

create_index    创建索引    参数: 二元元组构成列表        create_index([("age",1)])        create_index([("age",1),("name":-1)])        也可以直接写 域名 ("age") 表示对该域创建正向索引    返回值: 索引名称list_indexes    查看索引drop_index      删除索引drop_indexes    删除所有索引

聚合操作

aggregate()

功能  完成聚合操作

参数  聚合管道, 同mongoshell 中的聚合

返回值  数据操作结果游标对象

实例

lis = [    {
"$group": {
"_id": "$sex", "num": {
"$sum": 1}}},]cursor = myset.aggregate(lis)

索引聚合实例

from pymongo import MongoClientconn = MongoClient("localhost", 27017)db = conn.stumyset = db.class0# -------------------------------索引--------------------------------# 创建# index_name = myset.create_index("name")# index_age = myset.create_index("age",name="Age",sparse=True)# index_age = myset.create_index("age",name="Age",sparse=True,unique=True)#  删除索引# myset.drop_index("Age")# myset.drop_indexes()# 查看# for i in myset.list_indexes():# print(i)# ------------------------------聚合----------------------------------lis = [    {
"$group": {
"_id": "$sex", "num": {
"$sum": 1}}},]cursor = myset.aggregate(lis)for i in cursor: print(i)conn.close()

文件操作

1. 导入bson 二进制模块,连接数据库

import bson.binary

2. 选择要存储的文件, 使用 rb 方式读取内容

3. 将读取的内容转换为 bson 格式

content = bson.binary.Binary(data)

  功能  将 bytes 字串 转换为 bson 格式

  参数  bytes 字串

  返回值  转换后的数据

4. 将内容插入到数据库

实例

from pymongo import MongoClientimport bson.binaryconn = MongoClient("localhost",27017)db = conn.imagemyset = db.mm# --------------------存储----------------------------------# 读取图片内容# with open("123.PNG","rb") as f:    # data = f.read()# 格式转化# conntent = bson.binary.Binary(data)# 插入数据库# myset.insert_one({"filename":"123.jpg","data":conntent})#--------------------取出文件-------------------------------# img = myset.find_one({"filename":"123.jpg"})# 写入本地# with open("123.jpg","wb") as f:  # find_one 会自动转换不需要自己再转换了    # f.write(img["data"])conn.close()

 

转载于:https://www.cnblogs.com/shijieli/p/10478069.html

你可能感兴趣的文章
MySQL安装详解(V5.5 For Windows)
查看>>
Android单例模式
查看>>
Log4php 使用心得
查看>>
十三香_百度百科
查看>>
paip.网页右键复制菜单限制解除解决方案
查看>>
string.Format 格式化时间,货币
查看>>
Kerberos和NTLM - SQL Server
查看>>
记github上搭建独立域名的免费博客的方法过程
查看>>
Web设计之网页布局CSS技巧
查看>>
iOS key value coding kvc在接收json数据与 model封装中的使用
查看>>
Android 滑动效果入门篇(二)—— Gallery
查看>>
Revit二次开发示例:DesignOptions
查看>>
Entity Framework 系统约定配置
查看>>
优秀设计:纹理在网页设计中的20个应用示例
查看>>
C++ 关键字 explicit, export, mutable
查看>>
生成指定范围的一组随机数并求平均值
查看>>
android语音识别方法
查看>>
【c++】虚函数描写叙述符override
查看>>
File Operations in Android NDK(转)
查看>>
如何将kux格式的视频转换成我们常用的MP4格式
查看>>