Python网络爬虫(十三)——MongoDB

简介

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB

启动 MongoDB

MongoDB 安装之后需要验证 MongoDB 服务,可以选择到 MongoDB 安装目录下的 bin 目录执行:

mongod --dbpath D:\MongoDB\data

上边的命令将会启动 bin 目录下的 MongoDB 服务端,而后边跟的路径则是 data 目录(不存在的话可以手动建立)。

运行 MongoDB

上边只是启动了 MongoDB 服务端,如果要使用 MongoDB 的服务,则还需要启动 MongoDB 的客户端:

  • 添加数据目录:在 MongoDB 的安装目录中添加 data 目录
  • 添加环境变量:为了避免每次执行 MongoDB 的命令都要定位到 bin 目录中,可以将 bin 目录添加到环境变量中
  • 执行命令:在启动 MongoDB 服务段之后(管理员启动),保持终端不要关闭,然后在新的终端(管理员启动)中执行:
mongo

此时就启动了 MongoDB 的客户端,也就可以通过终端来操纵数据库。

Compass

和 MySQL 相似,同样也可以使用 GUI 来进行数据库操作,官方提供的 GUI 是 Compass,使用 GUI 的操作就简单很多了。想要了解的话可以自行下载安装使用。

将 MongoDB 制作为 Windows 服务

启动 MongoDB 之后,如果需要一直使用 MongoDB 的服务,该终端就不能关闭,而且在启动的时候需要指定 data 的路径,这是有点麻烦的。而通过将之制作成 Windows 服务就能够有效避免该问题。步骤为:

  • 创建配置文件:在 mongodb 的安装路径下创建配置文件 configure.cfg,内容为:
logpath=D:\MongoDB\log\mongod.log
dbpath=D:\MongoDB\data

logpath 对应的是日志路径,dbpath 对应的是数据库路径。

  • 安装 MongoDB 服务:执行命令:
mongod --config "D:\MongoDB\configure.cfg" --install
  • 启动 MongoDB:
net start mongodb
  • 关闭 MongoDB:
net stop mongodb
  • 移除 MongoDB:
"D:\MongoDB\bin\mongod.exe" --remove

MongoDB 概念

SQL MongoDB 描述
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接/MongoDB 不支持
primary key primary key

主键/MongoDB 自动将 _id 字段设置为主键

MongoDB 元素

主要包括 database,collection,document:

  • document:相当于关系型数据库中的一行。document 是一个对象,由键值对构成,类似于字典,是 json 的扩展形式:
{“name”:"zhangsan","num":"100"}
  • collection:相当于关系型数据库中的表。能够存储多个文档,结构可以不固定
{“name”:"zhangsan","num":"100"}
{“name”:"lisi","age":"20"}
{“name”:"wangwu","sex":"x"}

MongoDB 指令

指令 描述
db 查看当前数据库
show dbs 查看所有数据库
use databasename 切换数据库,如果数据库不存在,则进行创建(创建完成后需要插入数据才算做创建成功)
db.dropDatabase() 删除当前指向的数据库
db.collectionname.insert(value) 添加数据到指定 collection
db.collectionname.find() 从指定 collection 中查找数据

pymongo

连接 MongoDB

import pymongo

# 连接 MongoDB 服务,事先需要启动 MongoDB 服务
mongo = pymongo.MongoClient('127.0.0.1',port=27017)
print(type(mongo))
# 获得 test 数据库,没有则创建
db = mongo.test
# 获得 sheet1 collection
collection = db.sheet1
# 插入数据
collection.insert_one({"username":"zhangsan","num":"100"})

结果为:

<class 'pymongo.mongo_client.MongoClient'>

通过上边的数据,可以将输入插入到 test 数据库中的 sheet1 collection 中,最后的结果可以在终端或者 Compass 中查看。

数据类型

类型 描述
ObjectID 文档 ID
String 字符串(有效的 utf-8)
Boolean 布尔值
Integer 整数型
Double 浮点型
Arrays 数据或列表,多个值存储到一个键
Object 嵌入式文档,此时的一个值就是一个文档
Null Null
Timestamp 时间戳,表示从 1997/1/1 至今的总秒数
Date 存储当前日期或时间的 UNIX 时间格式

常用函数

insert_one

加入一条 document 到 collection 中。

insert_many

加入多条 document 到 collection 中。

find_one

查找一条 document。

find

查找所有 document。

update_one

更新一条 document。

updata_many

更新多条 document。

delete_one

删除一条 document。

delete_many

删除多条 document。

import pymongo

mongo = pymongo.MongoClient('127.0.0.1',port=27017)
db = mongo.test
collection = db.sheet1

result = collection.find()
for item in result:
    print(item)
print('********************************')

collection.insert_one({"username":"zhangsan","num":"100"})
print(collection.find_one({"num":"100"}))
print('********************************')

collection.insert_many(
    [
        {"username": "lisi", "num": "101"},
        {"username":"wangwu","num":"102"},
        {"username":"zhaoliu","num":"103"}
    ])
result = collection.find()
for item in result:
    print(item)
print('********************************')

collection.update_many({"username":"zhangsan"},{"$set":{"username":"zhangjie"}})
result = collection.find()
for item in result:
    print(item)
print('********************************')

collection.delete_many({"username": "zhangjie"})
result = collection.find()
for item in result:
    print(item)

结果为:

********************************
{'_id': ObjectId('5ec92d4fb19033c10e141c94'), 'username': 'zhangsan', 'num': '100'}
********************************
{'_id': ObjectId('5ec92d4fb19033c10e141c94'), 'username': 'zhangsan', 'num': '100'}
{'_id': ObjectId('5ec92d4fb19033c10e141c95'), 'username': 'lisi', 'num': '101'}
{'_id': ObjectId('5ec92d4fb19033c10e141c96'), 'username': 'wangwu', 'num': '102'}
{'_id': ObjectId('5ec92d4fb19033c10e141c97'), 'username': 'zhaoliu', 'num': '103'}
********************************
{'_id': ObjectId('5ec92d4fb19033c10e141c94'), 'username': 'zhangjie', 'num': '100'}
{'_id': ObjectId('5ec92d4fb19033c10e141c95'), 'username': 'lisi', 'num': '101'}
{'_id': ObjectId('5ec92d4fb19033c10e141c96'), 'username': 'wangwu', 'num': '102'}
{'_id': ObjectId('5ec92d4fb19033c10e141c97'), 'username': 'zhaoliu', 'num': '103'}
********************************
{'_id': ObjectId('5ec92d4fb19033c10e141c95'), 'username': 'lisi', 'num': '101'}
{'_id': ObjectId('5ec92d4fb19033c10e141c96'), 'username': 'wangwu', 'num': '102'}
{'_id': ObjectId('5ec92d4fb19033c10e141c97'), 'username': 'zhaoliu', 'num': '103'}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章