一、前言
首先我先说下关于这节我的学习情况,我个人在这一节第一次看的时候是一头雾水,因为这节使用的数据库并不是我们常见的关系型数据库,而是非关系型数据库MongoDB。在这节的学习中我是相当的难受,每次对数据库操作后总想使用关系型数据的操作方式进行查看下刚才的操作,所以每次都被系统无情的“驳回”我输入的命令。其实在第二次进行学习的时候就适应了,个人觉得有时候非关系型数据库有时候还真的是很好玩的,没有那么多的表于表之间的关系,操作有时也很方便。总的来说吧,在这节中我会尽最大努力将自己所学的内容以及自己对某些知识点的理解进行书面化的表达。如果有什么错的地方,希望看到的各位能够指出,同时我也是为自己做一个笔记,以便以后能够更好的用于再学习。
二、MongoDB数据库的安装
1、)MongoDB的在线安装:
这里我就不写MongoDB数据库是如何安装的了,给出一个链接:不同系统中MongoDB的安装
2、)MongoDB在CentOS7中的离线安装
a、下载MongoDB的tar包
链接为:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.3.tgz
快速的百度云:链接: https://pan.baidu.com/s/10PyQjwPJFM67H6pYag-uow 密码: bq5n
b、解压之后移动到/usr/local/中:
tar zxvf mongodb-linux-x86_64-rhel70-3.6.3.tgz
mv mongodb-linux-x86_64-rhel70-3.6.3 /usr/local/mongodb
c、创建dbs文件夹和logs文件
mkdir -p /var/lib/mongodb/dbs /var/log/mongodb && touch /var/log/mongodb/logs
d、在/usr/local/mongodb/bin中测试启动
./mongod --dbpath=/var/lib/mongodb/dbs --logpath=/var/log/mongodb/logs --fork
此时会在后台进行启动,如下效果:
e、查看后台mongod的进程号,然后进行终止
ps -ax | grep mongod
kill 1279 (根据自己实际的进程号来写)
f、配置为开机启动
新建vim /etc/mongodb.conf添加以下内容:
dbpath=/var/lib/mongodb/dbs
logpath=/var/log/mongodb/logs
fork=true
在/lib/systemd/system中新建mongodb.service文件,添加如下内容:
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod --config /etc/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /etc/mongodb.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
启动服务:systemctl start mongodb.service
停止服务:systemctl stop mongodb.service
开机启动 :systemctl enable mongodb.service
g、将mongodb添加到环境变量中
在/etc/profile文件中添加如下内容:
MONGODB_HOME=/usr/local/mongodb/
PATH=$PATH:$MONGODB_HOME/bin:
激活环境变量:source /etc/profile
此时输入mongo可进入mongo shell命令行
三、对MongoDB数据库进行操作
1)、首先需要安装pymongo
python2:python -m pip install --upgrade pymongo
python3:python3 -m pip install --upgrade pymongo
2)、创建连接
from pymongo import MongoClient conn = MongoClient()
在MongoClient()中我并没有写任何内容,此处表示连接本地的数据库,当然也可以写成
MongoClient("localhost",27017)
还可以写成
MongoClient('mongodb://localhost:27017/')
在连接阿里云服务器中mongodb数据库时,此处有点坑,需要先开启阿里云中的安全组中的端口号。
MongoClient('mongodb://xx.xx.xx.xx:27017')
在mongodb数据库中可以有多个数据库,而每个数据库中也可以有多个集合,一个集合就是放置一些相关文档的地方。当然在Mongo中,当所使用的数据库不存在时,mongo会自动进行创建该数据库,集合也是同样的。同时,我们在对MongoDB操作时,我们的大部分操作都是在一个集合上进行操作的。在数据库对象上调用collection_names方法获得数据库中的集合列表。
创建一个数据库对象,并连接test_database数据库
db = conn.test_database 或 db = conn["test_database"]
查看当前数据库中的集合列表
db.collection_names()
如果数据库为新创建的数据库,那么当前数据库中的集合为0,上述代码将返回一个空的列表。如果数据库中有集合,那么会返回该集合的名称。
接下来,试着添加一条数据,将该数据添加到posts中。
import datetime post = {"author":"Mike", "text":"Another post!", "tags":["bulk","insert"], "date":datetime.datetime.utcnow()} posts = db.posts posts.insert_one(post)
3、处理文档
MongoDB以文档的形式存储数据,这种形式有着相对自由的数据结构。MongoDB是一个"无模式"数据库:同一个集合中的文档通常拥有相同的结构,但是MongoDB中并不强制要求使用相同结构。在内部,MongoDB以一种称为BSON的类似JSON的二进制形式存储文档。PyMongo允许以Python字典的形式写和取出文档。
根据上文插入的数据,此处可以进行查询一条数据
>>> posts.find_one({"text":"Another post!"})
也可以查询多条数据,首先先插入一条数据
post = {"author": "Mike", "text": "My first blog post!", "tags": ["mongodb", "python", "pymongo"], "date": datetime.datetime.utcnow()} posts.insert_one(post) 查询输出多条数据信息: for result in posts.find(): print(result)
结果会输出:
当然也可以插入多条数据,此时需要用到insert_many()函数。这样就可以将多条数据进行写入mongodb数据了。
数据库有写入,当然也有删除。当删除一条数据时可以使用delete_one(),删除多条时可以使用delete_many(),当然其中需写上要输出的数据中的部分元素。例如删除一个:
posts.delete_one({"text":"Another post!"})
关于python如何操作Mongodb的,可以看这里,Python操作Mongodb