Python连接MongoDB数据库

   日期:2020-05-10     浏览:104    评论:0    
核心提示:由于实践活动和非结构化数据库课程的摘要,对python连接MongoDB数据库的相关操作等做出如下汇总内容。数据库

Python连接MongoDB数据库

  • 安装MongoDB
  • PyMongo的安装
    • 直接使用pip安装:
    • 利用whl文件安装
  • PyMongo的使用
    • 使用PyMongo初始化数据库
    • 使用PyMongo初始化集合
    • 插入数据
    • 查找数据
    • 逻辑查询
    • 对查询结果排序
    • 更新记录
    • 删除记录
    • 对查询结果去重

安装MongoDB

  1. 在官网上下载MongoDB数据库的安装包,链接为https://www.mongodb.com/download-center/community
  2. 对windows版本来说,安装过程需特别注意的是选择Custom版本而不是Complete版本,并将修改安装路径为E:\mongodb。
  3. 在E:\mongodb目录下新建用来存放数据的文件夹E:\mongodb\data,用来存放日志的文件夹E:\mongodb\logs,用来存放数据库文件的文件夹E:\mongodb\data\db。
  4. 启动命令行,进入E:\mongodb\bin目录,输入以下命令使得操作系统自动启动MongoDB.exe。
mongod --dbpath "E:\mongodb\data\db" --logpath "E:\mongodb\data\logs\MongoDB.log" --install --serviceName "MongoDB"
  1. 接着在命令行的E:\mongodb\bin目录目录下以管理员身份运行以下代码,启动MongoDB服务。
net start MongoDB
  1. 关闭服务的操作命令为
net stop MongoDB

PyMongo的安装

PyMongo库是Python对MongoDB操作的接口包,能够实现对MongoDB的增删改查及排序等操作。

直接使用pip安装:

pip install pymongo

利用whl文件安装

直接使用pip安装可能会遇到网络问题导致安装失败,因此,对于Windows系统可以访问http://www.lfd.uci.edu/~gohlke/pythonlibs/

在这个网站上找到PyMongo,并将whl包下载到本地,然后使用以下命令安装:

 pip install 下载下来的whl文件名

PyMongo的使用

使用PyMongo初始化数据库

要使用PyMongo操作MongoDB,首先需要初始化数据库连接。如果MongoDB运行在本地计算机上,而且也没有修改端口或者添加用户名及密码,那么初始化MongoClient的实例的时候可直接写为:

import pymongo
client = pymongo.MongoClient(host = 'localhost', port = 27017)

如果MongoDB是运行在其他服务器上面的,那么就需要使用“URI(Uniform Resource Identifier,统一资源标志符)”来指定连接地址。MongoDB URI的格式为:

mongodb://用户名:密码@服务器IP或域名:端口

例如

import pymongo
client = pymongo.MongoClient('kingname:12345@45.76.110.210:27019')

无需权限认证时可以写为:

import pymongo
client = pymongo.MongoClient('mongodb://45.76.110.210:27019')

使用PyMongo初始化集合

有以下两种方式获取数据库和集合

#方式1
db = client['github']
collection = db['repo']
#方式2
db = client.github
collection = db.repo

插入数据

MongoDB的插入操作非常简单。用到的方法为insert_one(参数),插入的参数就是Python的字典。插入一条数据的代码如下。

import pymongo
client = pymongo.MongoClient(host = 'localhost', port = 27017)
db = client['sample']
collection = db['inf']
data = {'id': 123, 'name': 'kingname', 'age': 20, 'salary': 999999}
collection.insert_one(data)

将多个字典放入列表中,并将列表作为insert_many()方法的参数,即可实现批量插入数据,代码如下。

more_data = [
		{'id': 2, 'name': '张三', 'age': 10, 'salary': 0},
		{'id': 3, 'name': '李四', 'age': 30, 'salary': -100},
		{'id': 4, 'name': '王五', 'age': 40, 'salary': 1000},
        {'id': 5, 'name': '外国人', 'age': 50, 'salary': '未知'}]
collection.insert_many(more_data)

查找数据

MongoDB的查找功能对应的方法是:

find(查询条件,返回字段)
find_one(查询条件,返回字段)

两个参数的类型均为Python字典,参数可以省略。其中,find_one()一次只返回一条信息。因此用得最多的是find()这个方法。
普通查询方法有以下3种写法。

content = collection.find()
content = collection.find({'age': 29})
content = collection.find({'age': 29}, {'_id': 0,'name': 1, 'salary': 1})

在不写find()方法的参数时,表示获取指定集合中所有内容的所有字段。

find()方法的第2个参数指定返回内容。这个参数是一个字典,Key就是字段的名称,Value是0或者1,0表示不返回这个字段,1表示返回这个字段。其中_id比较特殊,必须人工指定它的值为0,这样才不会返回。而对于其他数据,应该统一使用返回,或者统一使用不返回。

collection.find({}, {'name': 1, 'salary': 1})
collection.find({}, {'age': 0})

只有_id是一个例外,必须要指定“’_id’: 0”,才不会返回,否则默认都要返回。下面以一个列表推导式为例:

content = [x for x in collection.find({'age': 29}, {'_id': 0, 'name': 1, 'salary': 1})]

find()方法返回的是一个可以迭代的PyMongo对象,这个对象可以被for循环展开。展开以后可以得到很多个字典。每个字典对应一条记录。所以这个列表推导式也可以改写为for循环:

content_obj = collection.find({'age': 29}, {'_id': 0, 'name': 1, 'salary': 1})
content = []
for each in content_obj:
	content.append(each)

逻辑查询

PyMongo也支持大于、小于、大于等于、小于等于、等于、不等于这类逻辑查询。

符号 意义
$gt 大于
$lt 小于
$gte 大于等于
$lte 小于等于
$eq 等于
$ne 不等于

它们的用法用一个例子来说明:

collection.find({'age': {'$gt': 29}}) #查询所有age > 29的记录
collection.find({'age': {'$gte':29, '$lte':40}})  #查询29 ≤ age ≤ 40的记录
collection.find({'salary': {'$ne: 29}}) #查询所有salary不等于29的记录

对查询结果排序

MongoDB支持对查询到的结果进行排序。排序的方法为sort()。它的格式为:

handler.find().sort('列名', 1-1)

查询一般和find()配合在一起使用。例如:

collection.find({'age': {'$gte': 29, '$lte': 40}}).sort('age', -1)
collection.find({'age': {'$gte': 29, '$lte': 40}}).sort('age', 1)

首先查询所有年龄大于等于29岁、小于等于40岁的记录,然后按年龄来进行排序。sort()方法接收两个参数:第1个参数指明需要以哪一项进行排序;第2个参数-1表示降序,1表示升序。

更新记录

更新可使用update_one()和update_many()方法。它们的格式为:

collection.update_one(参数1, 参数2)
collection.update_many(参数1, 参数2)

前者只更新一条信息,后者更新所有符合要求的信息。这里的参数1和参数2都是字典,都不能省略。参数1用来寻找需要更新的记录,参数2用来更新记录的内容。例如:

#将第1个年龄为20岁的人的名字改为kingname
col.update_one({'age': 20}, {'$set':{'name': 'kingname'}})
#将所有年龄为20岁的人的年龄全部改为30
col.update_many({'age': 20}, {'$set':{'age': 30}})

删除记录

删除可使用delete_one()和delete_many()方法。它们的格式为:

collection.delete_one(参数)
collection.delete_many(参数)

这里的参数都是字典,不建议省略。delete_one()方法只删除一条记录,delete_many()删除所有符合要求的记录。
例如:

#删除第1个名字叫作kingname的人
collection.delete_one({'name': 'kingname'})
#删除所有名字叫作kingname的人
collection.delete_many({'name': 'kingname'})

对查询结果去重

去重使用distinct()方法,其格式为:

collection.distinct('列名')

这个方法返回一个去重后的列表。

参考书籍:
《Python爬虫开发:从入门到实践》
《NoSQL数据库入门与实践》

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服