内容回顾
- Xpath选择器
不要求记忆,只要混个眼熟即可
- 基于openpyxl模块爬取豆瓣电影
单页爬取
多页爬取
1.校验请求头里面是否有User-Agent参数
请求头里面加上即可
2.限制IP规定时间内的访问次数
1.人为的加上时间延迟
在你的程序里面加上time.sleep()让你的程序间歇一段时间之后再执行
2.IP代理池
- 非关系型数据库之MongoDB
关系型数据库与非关系型数据库
常见数据库软件的端口号
3306 MySQL
6379 redis
27017 MongoDB
今日内容概要
- MongoDB下载与安装
- 基本命令操作
- 账号创建及权限管理
- 快捷操作MongoDB软件
Navicat
Robo 3T
今日内容详细
MongoDB下载与安装
百度搜索官网点击社区版本(community server)下载即可
安装步骤可以参考:MongoDB 教程 | 菜鸟教程
1.下载.msi的文件
2.完成后双击该文件
custom自定义安装路径(放到D、E、F盘的根目录下)
D:
E:
F:
不要勾选install MongoDB Compass
3.手动在MongoDB文件夹根目录下(自动创建了就不要创了 版本原因)
1.创建data文件夹
然后再data文件夹内创建db文件夹
2.创建log目录
然后在log目录下创建mongod.log文件
4.将mongod.exe文件所在的路径添加到环境变量中
mongod.exe mongodb数据库的服务端
mysqld.exe MySQL数据库的服务端
5.在MongoDB文件夹根目录下
创建mongod.cfg文件
在该文件内拷贝以下代码
systemLog:
destination: file
path: "D:MongoDBlogmongod.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "D:MongoDBdatadb"
net:
bindIp: 0.0.0.0
port: 27017
setParameter:
enableLocalhostAuthBypass: false
6.系统服务制作
一定要用管理员身份打开cmd终端
mongod --config "D:MongoDBmongod.cfg" --bind_ip 0.0.0.0 --install
或者直接在命令行指定配置
mongod --bind_ip 0.0.0.0 --port 27017 --logpath D:MongoDBlogmongod.log --logappend --dbpath D:MongoDBdatadb --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install --auth
注意这里--auth如果没有创建权限管理就不要加
7.启动关闭
net start MongoDB
net stop MongoDB
8.登录
mongo
MongoDB重要概念
"""
MySQL中三个重要概念
库 文件夹
表 文件夹里面的文件
记录数据 文件里面的一行行数据
"""
# 查看所有的库
show databases; # MySQL命令
show dbs # MongoDB命令
SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
inner join 表连接,MongoDB不支持
primary key primary key MongoDB自动将_id字段设置为主键
库的增删改查
1.创建
use 库名 # use db1
# 库不存在会自动创建(临时先创建在内存中) 但是只有当你真正在该库里面产生数据之后才会刷到硬盘(再保存到硬盘) 如果不录入数据则创建的库就没了 所以用show dbs可能查看不到
2.查看
show dbs
3.改(忽略)
4.删
要先有数据的库才能删除
use db1
db.db1.insert({'name':'jason'})
db.dropDatabase() (这里敲代码时tab键补全)
集合的增删改查
1.查
show tables
2.增
db.集合名 # 规律跟 use 库名一致 里面没有数据是show不出来的 db是关键字
db.createCollection(集合名) # db.createCollection('t2') # 直接写入硬盘
3.改(忽略)因为没有固定表结构没有字段 字段名 字段类型
4.删
db.集合名.drop() # db.t2.drop()
文档增删改查
1.增
单条
db.集合名.insert({...}) # db.t1.insert({'name':'jason'})
等价于
db.集合名.save({...})
多条
db.集合名.insert([{...},{...},{...},{...}])
2.查
查询所有
db.集合名.find() # db.t1.find()
3.改
db.集合名.update(
筛选条件
新的内容
)
db.t1.update({'name':'jason1'},{$set:{'name':'jason111'}})
4.删
db.集合名.remove(
筛选条件
)
db.t1.remove({'name':'jason2'})
#1、删除多个中的第一个
db.t1.deleteOne({ 'age': 8 })
#2、删除国家为China的全部
db.t1.deleteMany( {'addr.country': 'China'} )
#3、删除全部
db.t1.deleteMany({})
用户创建及权限管理
正常的数据库软件都应该有用户及对应的权限管理
不可能所有人都是管理员都可以对所有的数据进行操作
有些用户只可以查看,有些用户可以修改,有些用户可以删除...
管理员账户需要在admin数据库下创建
1.切换到admin数据库下
use admin
2.创建账户并且赋予权限
db.createUser(
{
user: "root",
pwd: "123",
roles: [ { role: "root", db: "admin" } ]
}
)
其他用户在test数据库下创建
1.切换到test数据库下
use test
2.创建账户并赋予权限
db.createUser(
{
user: "jason",
pwd: "123",
roles: [ { role: "readWrite", db: "test" },
{ role: "read", db: "db1" } ]
}
)
'''上述账户都可以创建多个'''
先停止服务
net stop MongoDB
再移除服务
mongod --remove
再次添加
mongod --bind_ip 0.0.0.0 --port 27017 --logpath D:MongoDBlogmongod.log --logappend --dbpath D:MongoDBdata --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install --auth
再次启动
net start MongoDB
两种验证方式
1.直接在登录的时候验证
mongo -u "root" -p "123" --port 27017 --authenticationDatabase "admin"
2.进入之后再验证
mongo
use admin
db.auth("root","123")
注意在切换账户时普通用户不能直接切换到管理员身份需要exit退出后重新进入
作业
1.记忆关系型数据库的ACID四大特性
- 原子性(Atomicity):化学中的原子指不可再分的基本微粒,数据库中原子性强调事务是一个不可分割的整体,事务开始后所有操作要么全部成功,要么全部失败,不可能停滞在中间某个环节。如果事务执行过程中出错就会回滚到事务开始前的状态,所有的操作就像没有发生一样不会对数据库有任何影响。
- 一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态,即一个事务执行之前和执行之后都必须处于一致性状态。拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还是5000,这就是事务的一致性。
- 隔离性(Isolation):当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离,比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转入钱。
- 持久性(Durability):一个事务一旦被提交,则对数据库的所有更新将被保存到数据库中,不能回滚。
2.自己总结归纳数据库三大范式
第一范式(保证每列具有原子性,列不可再分)。
第二范式( 确保表中的每一列都和主键相关)
第三范式 (数据库中的每一列和主键列直接相关而不是间接相关)
3.自己独立完成数据库的安装并创建两个管理员账户三个普通用户账户
三个普通账户各自权限都不一致