python学习笔记——mongodb数据库
1 概述
1.1 文件管理阶段
优点:可以长期保存 能存储大量数据
缺点:没有结构化的组织 查找不方便 数据容易冗余
1.2 数据库管理阶段
有文件存储的优点,同时解决了文件存储的问题
缺点 : 操作难度较高
数据 --> 数据库 --> 数据库管理系统 --> 数据库系统
2 数据库分类
2.1 关系型数据库
采用关系磨性来组织数据结构的数据库
常见数据库形式有:Oracle DB2 SQLServer Mysql sqlite
优点:
(1)容易理解,使用方便,sql语句本身比较成熟,而关系型数据库大都采用sql做数据操作
(2)易于维护,完整性好,数据一致性高
(3)通用化程度高,技术成熟,可以使用外链等操作
缺点:
(1)无法很好满足高并发需求,每次数据操作都需要解析sql语句,导致读写能力下降(一般该类型数据库都是用C / C++语言编写的,输入时采用sql语句,需要编译)
(3)针对海量数据的爆发处理能力不足,每次操作都要上锁
(4)扩展性不足
2.2 非关系型数据库 (Nosql not only sql)
优点:
(1)可以满足高并发需求,读写能力强
(2)支持分布式部署
(3)弱化了数据结构,降低了数据的一致性
缺点:
(1)发展比较晚,技术尚不成熟,比如缺少join等复杂性操作,通用性差,没有sql这样的语句
(2)结构灵活,灵活则会导致混乱,写法复杂
非关系性数据库(Nosql)适用那些情况
(1)数据磨性结构简单
(2)对数据的一致性要求低
(3)对数据的并发处理要求高
(4)对数据的扩展性有要求
非关系型数据库Nosql分类
(1)键值类数据库:
redis oracle DBD tokyo
如:name:张三
(2)列存储:
HBase
(3)文档型数据库:
MongDB
{ name:张三, sex:男}
(4)图形数据库
3 MongoDB数据库
3.1 数据库特点
(1)非关系型 文档型
(2)C++ 编写,支持分布式
(3)数据格式为bson类型,bson格式是jion的升级版,他丰富了json的数据类型
(4)功能比较前面
(5)支持众多编程语言接口 python ruby C# C++ PHP
3.2 MongoDB的安装
自动安装
在Linux系统中的安装步骤
(1)sudo apt -get update
(2)sudo apt -get install mongodb
默认安装目录:/var/lib/mongodb
配置文件:
/etc/mongodb.conf
/usr/bin
手动安装
(1)www.mongodb.com 下载安装包
(2)在目录下解压 /usr/local/opt
(3)解压后将文件夹中bin目录添加到环境变量中
export PATH = $PATH:/usr...
3.3 mongo的基本操作
在linux终端上输入mongo可以启动mongo shell
tarena@tedu:~$ mongo MongoDB shell version: connecting to: test
该模式下支持简单的语法
quit() 退出 mongo shell
mongod
--dbpath:指定数据目录,每个mongod进程都需要独立的数据目录,如果要是有3哥mongod实例,则必须有3个独立的数据目录;当mongod启动时,会在数据库目录中创建mongod.lock文件,这个文件用于防止其他的mongod纯净使用该数据目录
--port:指定服务器监听的端口号,默认端口号为27017,要运行多个mongo进程,则要给每个指定不同的端口号。
--logpath:指定日志的输出路径,如果对文件夹有读写权限,系统会在文件不存在时创建它,它会将已有文件覆盖掉;
--logappend:同logpath,但该选项可不会将原有文件覆盖,而是保留原来的日志
--config:指定配置文件,加载命令行未指定的各种选项
3.4 mongo的基本概念
为了对比,现将关系型数据库mysql与mongo进行对比
(1)MySQL与mongo基本含义对比
MySQL mongo 含义
database database 数据库
table collection 表/集合
column field 字段/域
row document 记录/文档(每一条信息称之为文档)
index index 索引
(2)数据形式对比
MySQL数据(表)结构形式
---------------------------
id | name | age
---------------------------
1 | Lily | 10
---------------------------
2 | Lucy | 11
---------------------------
mongo数据结构(字典)
{
'_id':ObjectId("xxxxxxxxxxxxxxxxxxx"),
'name': 'Lily',
'age': 10
},
{
'_id':ObjectId("xxxxxxxxxxxxxxxxxxx"),
'name': 'Lucy',
'age': 11
}
3.5 创建数据库
创建数据库:use dbname(dbname为数据库名)
注:
(1)use为选择使用的数据库,如果数据库不存在,则插入数据时会自动创建该数据库
实例:
tarena@tedu:~$ mongo MongoDB shell version: connecting to: test > use dbname switched to db dbname > # use 并不是直接将数据库创建起来,主要还是选择这个数据,只有真正创建这个表时,才是真正创建这个数据库 > show dbs admin (empty) local .078GB mongo_test .078GB > # 此时并没有显示dbname数据库,因里面并没有数据
(2)db(全局变量)表示当前正在使用的数据库,如果没有use选用目标数据库,则默认使用一个叫test的数据库
tarena@tedu:~$ mongo MongoDB shell version: connecting to: test > db test > use dbname switched to db dbname > db dbname
数据库的命名规则和特点
(1)数据库支持格式为utf-8
(2)数据库区分大小写,原则上都是小写;sql语句则不区分大小写
(3)命名也可以是utf-8格式,但不能是空字符串
(4)数据库名不能含有:空格、点、/ \ '\0'
(5)不能超过64字节
(6)数据库避免与诸如admin、local、config等数据库关键字冲突
注:admin(存储用户权限)、local(存储不想被分享复制的数据)、config(当分布式操作时才会出现,表示分片处理信息)
3.6 数据的备份与恢复
备份:
mongodump -h dbhost -d dbname -o dbdir
主机 数据库 文件夹
tarena@tedu:~$ mongodump -h 127.0.0.1 -d stu -o dbstudent connected to: 127.0.0.1 : DATABASE: stu to dbstudent/stu...
查找是否已经备份成功
tarena@tedu:~$ ls AID1709.csv dbstudent PycharmProjects 视频 下载 anaconda3 examples.desktop 公共的 图片 音乐 core java_error_in_PYCHARM_.log 模板 文档 桌面 tarena@tedu:~$ ls dbstudent/ stu
恢复数据
mongorestore -h dbhost -d dbname <path>
主机 将数据回复到那个数据库 要恢复数据库文件夹
tarena -d student student/stu connected ...
3.7 数据库删除
db.dropDatebase()
功能:删除当前数据库
3.8 数据库检测
tarena@tedu:~$ mongostat connected to: 127.0.0.1 insert query update delete getmore command flushes mapped vsize res faults locked db idx miss % qr|qw ar|aw netIn netOut conn time 640m .47g 35m test: 62b 4k :: 640m .47g 35m test: 62b 4k ::
具体截图
备注:insert (每秒的插入次数) query(每秒的查询次数) update(更新次数) delete(删除次数 )
3.9 检测数据库的读写时长
mongotop 监测数据库的读写时长
tarena@tedu:~$ mongotop connected to: 127.0.0.1 ns total : grid.system.namespaces 0ms 0ms 0ms grid.system.indexes 0ms 0ms 0ms grid.fs.files 0ms 0ms 0ms grid.fs.chunks 0ms 0ms 0ms grade.system.namespaces 0ms 0ms 0ms grade.system.indexes 0ms 0ms 0ms grade.class 0ms 0ms 0ms
截图显示
3.10 查看数据库
查看方式:show dbs
tarena@tedu:~$ mongo MongoDB shell version: connecting to: test > show dbs admin (empty) dbname .078GB local .078GB mongo_test .078GB > use stu switched to db stu > db.createCollection('class0') { "ok" : } > db.createCollection('class0') { "ok" : , "errmsg" : "collection already exists" }
4 集合
db.createCollection(collection_name)
功能:创建一个集合
参数:集合的名称
注:相当于 sql 语句中的表
4.1 集合的命名规则
(1)集合名不能以system . 开头,它是系统集合保留的前缀
(2)集合名称不要和关键字重名,不要带有$
(3)集合名能含有 ‘\0'
(4)集合也是utf-8字符串
4.2 集合的创建
db.collection_name.insert()
collection_name:集合名
当插入数据时,如果集合不存在则会自动创建;此也意味着,若将集合名称写错时也会创建新的集合并插入数据
4.3 查看数据库中的集合
tarena@tedu:~$ mongo MongoDB shell version: connecting to: test > show collections class3 system.indexes > show tables class3 system.indexes >
show collections 和 show tables 可以达到相同效果
4.4 集合的创建(一)
db.createCollection(collection_name)
功能:创建一个集合
参数:集合的名称
命名规则:
(1)集合也是utf-8 字符串
(2)不能含有'\0',因为最终是用c++来解析的,当存在'\0'时,c++就会默认为这是结束的
(3)不能以system.开头,他是系统集合的保留前缀
(4)集合名称不要和关键字重名 ,不要带有$,mongdb中好多关键字是有$引入的,也即,集合名称不要额操作符重名
4.5 集合的创建(二)
db.collection_name.insert()
当插入数据时,集合不存在时则会自动创建
如果将集合名称写错时,也会创建新的集合并插入数据
4.6 删除一个集合
删除指定的集合:db.collecton_name.drop()
> show collections abc class0 class1 system.indexes > db.abc.drop() true > show collections class0 class1 system.indexes
4.7 集合的重命名
db.collection_name.renameCollection(new_name)
参数:新的集合名称
> show collections class0 class1 system.indexes > db.class1.renameCollection('cls') { "ok" : } > show collections class0 cls system.indexes >
5 文档
在形式上类似于python中的字典,每个文档内部由 0个 或 多个 键值对构成,但文档不同于字典的是,文档是有序的。
bson:{'name':'licy','age':18}
键的命名规则:
(1)键值均为uft-8类型字符串,所以作为键时,加不加均可
,}) WriteResult({ "nInserted" : }) > db.class0.find() { "_id" : ObjectId("5abf2fe426803c9f334a1019"), "name" : "李四", "age" : } >
(2)不能有‘\0',一般不会以点.和 $ 开头,也不使用下划线_开头
(3)键不能重复
文档中的值:
指的是mongo数据库支持的数据类型
mongo支持的数据类型:
字符串 utf-8字符串均为合法字符串
整型 32位 和64位
布尔类型 true false 或者1 0来表示也可以
浮点型 小数
Arrays 用来存储数组胡列表
Timestamp 时间戳,存储时间节点
Date 时间类型,年月日时分秒
Symbol 字符串类型 通常用来存储特殊字符
Null null类型 表示空
object 文档类型(通常用于内部文件)
Binary data 二进制数据
code 代码 js
regex 正则表达式
ObjectId 系统自动生成的ID对象
在一个集合中文档的域不一定相同,也就是说键值对不一定完全相同
在一个文档中尽量选择意义相同的文档放入统一集合中
5.1 insert() 方法
db.collection.insert()
例如
,}) WriteResult({ "nInserted" : }) > db.class0.find() { "_id" : ObjectId("5abf2fe426803c9f334a1019"), "name" : "李四", "age" : } >
ObjectId("5abf2fe426803c9f334a1019")
_id:是系统自动提供的主键,
5abf2fe4 26803c 9f33 4a1019 24位16进制
文档创建时间 机器ID 进程ID 计数器
插入多条文档
insert([{},{},{}])
db.class0.insert([{'name':'王五',age:18,sex:'女'},{name:'张三',age:19,sex:'女'}])
insert() 插入数据时,也可以采用_id 来自定义插入id值,但id值不能重复。
5.2 save() 方法
db.collection.save()
实例
db.class0.,name:,sex:'女'})
注:
(1)当插入键值对中没有_id 域时,同insert
(2)当插入键值对有_id值,则会将拟插入的_id值与已插入的_id值进行匹配,如果匹配到已经插入的值,则会对相应文档进行修改,如果没有匹配到则其功能相当于insert(),将会插入到数据库中
(3)save() 无法插入多条数据
5.3 find() 查找
db.collection.find(query, field)
功能:查找文档
参数:
query 查找条件 {name:'张三'}
field 显示的域 {_id:0}
返回值:返回查找到的文档(返回第一条,先进先出,查找的第一条,也即先输入的第一条)
field的值的表示方式:{field:0|1}
0:表示不显示该域
1:表示显示该域
注:
(1)若将某个域设置为1,则表示其他域均为0
(2)若将某个域设置为0,则表示其他域均为1
(3)不允许同时设置1和 0
(4)_id 永远默认为1,也可将其设置为0
5.4 findOne()查找
db.collection.findOne(query, field)
功能:只查找第一条符合查找条件的数据
参数:同find一样
返回值:返回第一条匹配到的文档
5.5 获取集合对象
db.getCollection('class0') == db.class0
6 条件查找
6.1 比较操作符
= > < >= <= !=
$eq 等于
计算 age=20 的记录
db.class0.find({age:{$eq:}},{_id:})
$lt 小于
$lte 小于等于
$gt 大于
$gte 大于等于
$ne 不等于
例如:
db.class0.find({age:{$gte:,$lte:}},{_id:})
$in 包含
db.class0.find({age:{$})
$nin 不包含
db.class0.find({age:{$nin:})
6.2 逻辑操作符
and or not
$and 逻辑与
db.class0.find({$})
注:query 中逗号分割的多个条件默认就是and关系
$or 逻辑或
db.class0.find({$})
$not 逻辑非
db.class0.find({age:{$}}},{_id:})
$nor 既不是也不是
db.class0.find({$nor:})
6.3 混合查找
age or (namg = 张三 and sex != 女) db.class0.find({$}) db.class0.find({$})
python学习笔记——mongodb数据库的更多相关文章
- MongoDB学习笔记:MongoDB 数据库的命名、设计规范
MongoDB学习笔记:MongoDB 数据库的命名.设计规范 第一部分,我们先说命名规范. 文档 设计约束 UTF-8 字符 不能包含 \0 字符(空字符),这个字符标识建的结尾 . 和 $ ...
- Python学习笔记020——数据库知识概述
数据库概述 1 提供数据库的软件都有哪些 MySQL.SQL_Server.Oracle.DB2.Mariadb.MongoDB ... (1)是否开源 开源软件:MySQL.Mariadb.Mong ...
- Python学习笔记020——数据库基本操作
本数据库的操作是Linux虚拟机平台下进行的 1 启动和链接MySQL服务 1.1 服务端 (1)查看服务状态 sudo /etc/init.d/mysql stauts (2)启动服务端 sudo ...
- Python学习笔记 使用数据库SQlite Mysql
SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用当中, 甚至在IOS和Android的APP中都可以集成 Python就内 ...
- 10 python学习笔记-操作数据库(十)
在功能.接口测试中,常常需要通过数据库的操作,来准备数据.检测环境及核对功能.接口的数据库操作是否正确. 在自动化测试中,就需要我们用代码连接数据库自动完成数据准备. 环境检查及数据库断言的功能.数据 ...
- Python学习笔记_Mysql数据库、Excel
一.操作mysql数据库 import pymysql # 1.连上数据库:账号,密码,ip,端口号,数据库 # 2.建立游标(去数据库拿东西的工人) # 3.执行sql # 4.获取结果 # 5.关 ...
- Python学习笔记020——数据库中的数据类型
1 数值类型 数值类型分为有符号signed和无符号unsigned两种. 1.1 整型 int (1)bigint 极大整型(8个字节) 范围 :-2**64 ~ 2**64 - 1 -922337 ...
- python学习笔记目录
人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
随机推荐
- TCP的TIME_WAIT快速回收与重用
声明一点: Linux中是无法修改tcp的TIME_WAIT值的,除非重新编译,起码我是没有找到怎么改.值得注意的是,net.ipv4.tcp_fin_timeout这个参数是FIN_WAIT_2的值 ...
- c++call back
#include "stdafx.h" struct A; typedef void(A::*MemFuncPtr) (int* e); class A { int a; }; c ...
- NYOJ-61 传纸条(一)
传纸条(一) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...
- Spark性能优化:数据倾斜调优
前言 继<Spark性能优化:开发调优篇>和<Spark性能优化:资源调优篇>讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为<Spark性能优化 ...
- Learning How To Code Neural Networks
原文:https://medium.com/learning-new-stuff/how-to-learn-neural-networks-758b78f2736e#.ly5wpz44d This i ...
- 将War发布到Tomcat7上遇到的问题及其解决
用MyEclipse做了一个app,在其自带的Tomcat里运行正常,做成war后却出现如下错误: [ServletException in:/page/jsp/template/block.jsp] ...
- hadoop2.2.0_hbase0.96_zookeeper3.4.5全分布式安装文档下载
本文档主要内容有: 1.hadoop 2.2.0 集群安装与部署 2.HBase 0.96 集群安装与部署 3.Zookeeper 3.4.5集群安装部署 备注:安装文档可能有所遗漏,后续将持续更新. ...
- 压缩 MongoDB 的数据文件
MongoDB采用了磁盘空间预分配的机制,为了避免磁盘碎片以及使用mmap后造成的近一步的内存碎片,但是随着数据的增删除改操作,数据文件不可避免的会产生空洞,造成磁盘空间和内存的浪费.本文说的是这方面 ...
- Solr打分出错
solr支持给某Field打分,在验证的过程的过程中出现错误:ERROR: [doc=likehua] cannot set an index-time boost, unindexed or nor ...
- 通过WebRTC实现实时视频通信(一)
通过WebRTC实现实时视频通信(一) 通过WebRTC实现实时视频通信(二) 通过WebRTC实现实时视频通信(三) WebRTC,名称源自网页实时通信(Web Real-Time Communic ...