人工智能(MongoDB)—— python的数据库编程


一、游标

        通过一定的操作获取返回结果的对象

        var cursor = db.class0.find()  创建游标
        cursor.hasNext()  查看是否有下一个数据
        cursor.next()  获取下一个数据

        通过Python 操作mongodb数据库

二、pymongo模块

        Python的第三方模块

        安装
                sudo  pip3  install  pymongo

        操作步骤
                1. 创建mongo数据库的链接对象
                        conn = pymongo.MongoClient('localhost',27017)
                2. 生成数据库对象
                        db = conn.stu
                3. 生成集合对象
                        my_set = db.class0
                4. 增删改差索引聚合操作
                        调用各种myset的属性函数
                5. 关闭数据库连接
                        conn.close()

三、数据库编程

1、插入数据    

        insert()   
        insert_many()    
        insert_one()
        save()

2、数据查找

        cursor = find()
                功能:查找数据库内容
                参数:同 mongo  shell   find()
                返回值:返回一个迭代器游标

                cursor对象的属性函数
                        next()
                        count()
                        limit()
                        skip()

                        sort()
                                mongoshell --->  sort({'name':1})
                                pymongo  --->  sort([('name',1)])
                                * 进行排序时游标要确保没有被访问过
                                * 使用了next或者for取游标后就不能使用limit sort操作了

        find_one()
                返回值是一个字典

2、修改操作  

        update(query,updata,upsert=False,multi=False)
        update_many()            匹配到多个文档时全部修改
        update_one()            只修改匹配到的第一条文档

        * 变成中mongo的数据类型null 可以用Python中的 None替代

3、删除数据   

        remove(query,multi = True)
                multi    默认为True 表示删除所有符合条件的数据
                            设置为False 表示只删除一条

4、复合功能函数

        find_one_and_delete()

5、索引

        创建索引
                ensure_index()
                create_index()
                create_indexes() 创建多个索引

        查看集合中的索引
                list_indexes()

        删除索引
                drop_index()  删除某一个索引
                drop_indexes() 删除所有索引

6、聚合操作

        aggregate([])
        参数:与mongoshell中聚合参数写法一致
        返回值:返回一个迭代游标 同find的返回值

7、GridFS  程序提取

        import gridfs

        gridfs.GridFS(db)

        插入二进制格式数据

        import bson.binary

四、示例

1、pymongo模块的基本使用

from pymongo import MongoClient 

#创建数据库链接
conn = MongoClient("localhost",27017)

#创建数据库对象  __getitem__  __setitem__
db = conn.stu 
# db = conn['stu']

#创建集合对象
myset = db.class5
# myset = db['class']

# print(dir(myset))

#插入操作
# myset.insert({'name':"张铁林",'King':'乾隆'})
# myset.insert([{'name':'张国立','King':'康熙'},{'name':'陈道明','King':'康熙'}])
# myset.insert_many([{'name':'唐国强','King':'雍正'},{'name':'陈建斌','King':'雍正'}])
# myset.insert_one({'name':'郑少秋','King':'乾隆'})
# myset.save({'_id':1,'name':'吴奇隆','King':'雍正'})

#查找操作

# cursor = myset.find({},{'_id':0})

# for i in cursor:
#     print(i['name'],'----',i['King'])

# myset = db.class1 

# cursor = myset.find({'age':{'$gt':15}},{'_id':0})

# for i in cursor:
#     print(i)

# print(cursor.next()) #取下一个值
# print(cursor.count()) #统计数量
# print(cursor.limit(2)) #取前几个文档
# print(cursor.skip(2))  #跳过前几个文档

# for i in cursor.sort([('age',1),('name',-1)]):
#     print(i)


# dic = {'$or':[{'age':{'$gt':16}},{'sex':'w'}]}

# data = myset.find_one(dic,{'_id':0})
# print(data)

#修改操作
# myset.update({'name':'张国立'},{'$set':{'name':'国立'}})

#如果文档不存在则插入
# myset.update({'name':'冰冰'},{'$set':{'King':'武则天'}},upsert = True)

# myset.update({'King':'乾隆'},{'$set':{'king_name':'弘历'}},multi = True)

#删除操作

# myset.remove({'name':'冰冰'})

#只删除第一条符合条件的数据
# myset.remove({'King':'乾隆'},multi = False)

#find_one查找并删除
print(myset.find_one_and_delete({'name':'吴奇隆'}))

#关闭链接
conn.close()

2、索引

from pymongo import MongoClient 

#创建数据库链接
conn = MongoClient("localhost",27017)

#创建数据库对象  
db = conn.stu 

#创建集合对象
myset = db.class5

#创建索引
# index = myset.ensure_index('name')
# print(index)  #索引名称

#复合索引
# index = myset.ensure_index([('name',1),('age',-1)])
# print(index)

# 创建其他类型索引
# index = myset.ensure_index('name',unique = True,sparse = True)
# print(index)

#查看当前索引
# for i in myset.list_indexes():
#     print(i)

#删除索引
# myset.drop_index('name_1')

#删除所有索引
# myset.drop_indexes()


#聚合
l = [
    {'$group':{'_id':'$King','num':{'$sum':1}}},
    {'$match':{'num':{'$gt':1}}}
]

cursor = myset.aggregate(l)
for i in cursor:
    print(i)

conn.close()

3、存文件

from pymongo import MongoClient 
import bson.binary 

conn = MongoClient("localhost",27017)
db = conn.images 
myset = db.jpg 

#存储
# f = open('file.jpg','rb')

# #格式转换为mongodb能存储的格式
# content = bson.binary.Binary(f.read())

# myset.insert({'filename':'file.jpg','data':content})

#获取文件
data = myset.find_one({'filename':'file.jpg'})

# data['filename']  文件名
# data['data']  文件内容

#通过字典获取内容写入到本地文件
with open(data['filename'],'wb') as f:
    f.write(data['data'])

conn.close()

4、读取文件

#用来获取数据库中gridfs的存储文件
from pymongo import MongoClient 
#和pymongo 绑定的
import gridfs 

conn = MongoClient('localhost',27017)
db = conn.grid 

#获取gridfs对象
fs = gridfs.GridFS(db)

#所有文件的游标
files = fs.find()
# print(files)
# print(files.count())
# 代表每个文件的对象
# for file in files:
#     print(file.filename)
for file in files:
    if file.filename == 'abc.mp4':
        with open(file.filename,'wb') as f:
            while True:
                #file的read()函数可以获取文件内容
                data = file.read(4096)
                if not data:
                    break
                f.write(data)
conn.close()

五、附录:目录

        人工智能(MongoDB)—— 目录汇总

猜你喜欢

转载自blog.csdn.net/qq_27297393/article/details/81210909