Python 操作MongoDB数据库
来源:互联网 发布:网易云音乐推荐算法 编辑:程序博客网 时间:2024/06/11 13:50
一、 MongoDB简单介绍
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
主要特点:
- MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。
- 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName=”Sameer”,Address=”8 Gandhi Road”)来实现更快的排序。
- 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
- 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
- Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
- MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
- Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
- Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
- Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
- GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
- MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
- MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
PS:自己对MongoDB集合的理解是:集合就是一组文档;文档类似于关系库里的行,集合类似于关系库里的表;集合中的文档无需固定结构(与关系型数据库的区别)
集合的命名规则:
- 不能是空字符串(“”)
- 不能包含\0字符(空字符)
- 不能使用system. 的前缀(系统保留)
- 建议不包含保留字 “$”
- 用. 分割不同命名空间的子集合(如:blogs.users, blog.posts)
其实,多个文档组合集合,多个集合组成数据库;一个实例可以承载多个数据库;每个数据库都有独立的权限;保留的数据库名称(admin,local,config)。
二、安装配置和基本数据结构的使用展示
安装:https://www.mongodb.com/download-center
启动:
Windows:mongod --dbpath E:\ProgramingSoftware\MongoDB\data
Mac: mongod —config /usr/local/etc/mongod.conf
Linux: sudo service mongod start
简单通过命令行操作数据库
三、图形化管理工具
Robomongo是基于Shell的跨平台MongoDB管理工具。
下载地址:https://robomongo.org/download
四、pymongo安装
安装:pip install pymongo
文档及参考
文档:http://api.mongodb.com/python/current/
Pypi: https://pypi.python.org/pypi/pymongo
Github: https://github.com/mongodb/mongo-python-driver/
连接数据库方式有三种:
- 简写:
client = MongoClient()
- 指定端口和地址:
client = MongoClient(‘localhost’, 27017)
- 使用URI:
client = MongoClient(‘mongodb://localhost:27017/’)
PS: 在电脑术语中,统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。
Web上可用的每种资源 -HTML文档、图像、视频片段、程序等 - 由一个通用资源标识符(Uniform Resource Identifier, 简称”URI”)进行定位。
大多数人可能熟悉”URL”,而不是URI。URL是URI命名机制的一个子集。
五、用pymongo库操作数据库代码实例:
# -*- coding:utf-8 -*-from pymongo import MongoClientfrom datetime import datetimefrom bson.objectid import ObjectIdclass TestMongo(object): def __init__(self): self.client = MongoClient() self.db = self.client['blog'] def add_one(self): """新增数据""" post = { 'title': '新的标题', 'content': '博客内容,。。。。', 'created_at': datetime.now() } return self.db.blog.posts.insert_one(post) def get_one(self): """查询一条数据""" return self.db.blog.posts.find_one() def get_more(self): """查询多条数据""" return self.db.blog.posts.find({'age': 24}) def get_one_from_oid(self, oid): """查询指定id的数据""" obj = ObjectId(oid) return self.db.blog.posts.find_one({'_id': obj}) def update(self): """修改数据""" # 修改一条数据 # rest = self.db.blog.posts.update_one({'age': 34}, {'$inc': {'age': 10}}) # return rest # 修改多条数据 return self.db.blog.posts.update_many({}, {'$inc': {'age': 10}}) def delete(self): """删除数据""" # 删除一条数据 # rest = self.db.blog.posts.delete_one({'age': 10}) # return rest # 删除多条数据 return self.db.blog.posts.delete_many({})def main(): obj = TestMongo() # rest = obj.add_one() # print rest.inserted_id # rest = obj.get_one() # print rest # rest = obj.get_more() # for item in rest: # print item["name"] # rest = obj.get_one_from_oid('59f5dbc04248ce23a8ace9a3') # print rest # rest = obj.update() # print rest.matched_count, rest.modified_count rest = obj.delete() print rest.deleted_countif __name__ == '__main__': main()
六、MongoEngine
- ODM模型简介
ODM (Object-Document Mapper)是对象文件映射。其实就是对SQL还有创建对象的一个封装框架。其相当于ORM的功能一样。很优秀的一个在python上封装的ORM库:MongoEngine。
ODM模型常见类型:EmbeddedDocument, EmbeddedDocumentField, Document, IntField, ListField, FloatField, StringField, BooleanField, DecimalField, DateTimeField, ObjectldField等等 - 安装:
pip install mongoengine
- 文档及参考
Pypi: https://pypi.python.org/pypi/mongoengine
Github: https://github.com/MongoEngine/mongoengine
文档: https://mongoengine-odm.readthedocs.io/index.html - 连接数据库方式有三种:
(1) 简写:connect(‘students’)
(2) 指定端口和地址connect(‘students’, host=’192.168.1.35’, port=27017)
(3) 使用URI:connect(‘students’, host=’mongodb://localhost/students’)
七、使用ODM模型操作数据库实例
# -*- coding:UTF-8 -*-from mongoengine import connect, EmbeddedDocument, EmbeddedDocumentField, Document, IntField, ListField, FloatField, StringFieldSEX_CHOICES = ( ('male', '男'), ('female', '女'))class Grade(EmbeddedDocument): """成绩""" name = StringField(required=True) score = FloatField(required=True)class Student(Document): """学生""" name = StringField(max_length=32, required=True) age = IntField(required=True) sex = StringField(choices=SEX_CHOICES, required=True) grade = FloatField() address = StringField() grades = ListField(EmbeddedDocumentField(Grade)) remark = StringField meta = { 'collection': 'student', 'ordering': ['-age'] }class TestMongoEngine(object): def __init__(self): connect('students') def add_one(self): """添加一条数据到数据库""" yuwen = Grade( name='语文', score=50 ) shuxue = Grade( name='数学', score=20 ) stu_obj = Student( name='拉拉', age=6, sex='female', grades=[yuwen, shuxue] ) stu_obj.remark = 'remark' stu_obj.save() return stu_obj def get_one(self): """查询一条数据""" return Student.objects.first() def get_more(self): """查询多条数据""" return Student.objects.all() def get_from_oid(self, oid): """根据ID来获取数据""" return Student.objects.filter(pk=oid).first() def update(self): """修改数据""" # 修改一条数据 # rest = Student.objects.filter(sex='male').update_one( # inc__age=1 # ) # return rest # 修改多条数据 rest = Student.objects.filter(sex='male').update( inc__age=10 ) return rest def delete(self): """删除数据""" # 删除一条数据 # rest = Student.objects.filter(sex='male').first().delete() # return rest # 删除多条数据 rest = Student.objects.filter().delete() return restdef main(): obj = TestMongoEngine() # rest = obj.add_one() # print rest.id # rest = obj.get_one() # print rest.id # print rest.name # rows = obj.get_more() # for row in rows: # print row.name # rest = obj.get_from_oid('59f6d7184248ce22ecf5ebc3') # if rest: # print rest.name # rest = obj.update() # print rest rest = obj.delete() print restif __name__ == '__main__': main()
- python操作mongodb数据库
- python操作MongoDB数据库
- Python操作MongoDB数据库
- Python操作MongoDB数据库
- python操作Mongodb数据库
- Python 操作MongoDB数据库
- python操作MongoDB数据库
- MongoDB:MongoDB数据库操作
- Python Web 6 —— Python操作MongoDB数据库
- 使用Python 2.7 CURD 操作非关系型数据库MongoDB
- Python 练习册--存入数据库(Mongodb,MySQL)操作
- Python操作MongoDB 新建不同的collection 批量插入数据库
- MongoDB 数据库操作类
- mongodb数据库操作语法
- mongodb 数据库update 操作
- Mongodb数据库 操作语句
- mongodb数据库命令操作
- mongodb数据库操作语法
- 倒排索引
- 李开复给中国大学生的七封公开信(其六)
- uboot学习(1)
- 【fjsd 1261】整数拆分
- [NOIP2017模拟]游戏
- Python 操作MongoDB数据库
- NOIP2016 Day2
- 一 统计学习理论前奏:大数定理的发展脉络
- bzoj3231[Sdoi2008]递归数列
- NKOJ P2419 【单调队列】集合的第N大元素
- 目录【Struts2】
- 配置redis外网可访问
- 15.3.2 FileWriter
- 抽象类与接口