Python使用PyMongo驱动连接MongoDB数据库

MongoDB是一个基于分布式文件存储的数据库,用C++编写,旨在为 Web应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富并且最像关系数据库的。下面将详细讲解在Python程序中使用MongoDB数据库的知识。

搭建MongoDB环境

MongoDB官网提供了可用于32位和64位系统的预编译二进制包,读者可以从MongoDB官网下载安装包,如图所示。
Python使用PyMongo驱动连接MongoDB数据库

根据当前计算机的操作系统选择下载安装包,因为作者使用的是64位的Windows系统,所以选择“Windows x64”,然后单击“Download”按钮。在弹出的界面中选择“msi”,如图所示。
Python使用PyMongo驱动连接MongoDB数据库

下载完成后得到一个“.msi”文件,双击这个文件,然后按照操作提示进行安装即可。安装界面如图所示。
Python使用PyMongo驱动连接MongoDB数据库

在Python程序中使用MongoDB数据库

在Python程序中使用MongoDB数据库时,必须首先确保安装了PyMongo这个第三方库。如果下载的是“exe”格式的安装文件,则可以直接安装。对于压缩包形式的安装文件,可以使用以下命令进行安装。

pip install pymongo

如图所示:
Python使用PyMongo驱动连接MongoDB数据库

如果没有下载安装文件,可以通过如下命令进行在线安装。

easy_install pymongo

安装完成后的界面如图所示:
Python使用PyMongo驱动连接MongoDB数据库

下面的实例文件mdb.py演示了在Python程序中使用MongoDB数据库的过程。

from pymongo import MongoClient
import random
…省略部分代码…
if __name__ == '__main__':
     print("建立连接...")             #输出提示信息
     stus = MongoClient().test.stu      #建立连接
     print('插入一条记录...')          #输出提示信息
     #向表stu中插入一条数据
     stus.insert({'name':get_str(2,4),'passwd':get_str(8,12)})
     print("显示所有记录...")         #输出提示信息
     stu = stus.find_one()             #获取数据库的信息
     print(stu)                      #显示数据库中的数据
     print('批量插入多条记录...')      #输出提示信息
     stus.insert(get_data_list(3))       #向表stu中插入多条数据
     print('显示所有记录...')          #输出提示信息
     for stu in stus.find():             #遍历数据信息
           print(stu)                  #显示数据库中的数据
     print('更新一条记录...')          #输出提示信息
     name = input('请输入记录的name:')#提示输入要修改的数据
     #修改表stu中的一条数据
     stus.update({'name':name},{'$set':{'name':'langchao'}})
     print('显示所有记录...')          #输出提示信息
     for stu in stus.find():             #遍历数据
           print(stu)                  #显示数据库中的数据信息
     print('删除一条记录...')          #输出提示信息
     name = input('请输入记录的name:')#提示输入要删除的数据
     stus.remove({'name':name})       #删除表中的数据
     print('显示所有记录...')          #输出提示信息
     for stu in stus.find():             #遍历数据信息
           print(stu)                  #显示数据库中的数据

在上述实例代码中,使用两个函数生成字符串。在主程序中首先连接集合,然后使用集合对象的方法对集合中的文档进行插入、更新和删除操作。每当数据被修改后,会显示集合中所有文档,以验证操作结果的正确性。

在运行本实例时,初学者很容易遇到如下Mongo运行错误。

Failed to connect 127.0.0.1:27017,reason:errno:10061由于目标计算机拒绝,无法连接…

出现上述错误的原因是没有开启MongoDB服务。下面是开启MongoDB服务的命令。

mongod --dbpath "h:\data"

在上述命令中,“h:\data”是一个保存MongoDB数据库中数据的目录,读者可以随意在本地计算机硬盘中创建,还可以自定义目录名字。在CMD控制台界面中,成功开启MongoDB服务时的界面如图所示。
Python使用PyMongo驱动连接MongoDB数据库

在运行本实例程序时,必须在CMD控制台中启动MongoDB服务,并且确保上述控制台界面处于打开状态。本实例执行后会输出:

建立连接...
插入一条记录...
显示所有记录...
{'_id': ObjectId('586243795cd071f570ed3b39'), 'name': 'vvtj', 'passwd': 'iigbddauwj'}
批量插入多条记录...
显示所有记录...
{'_id': ObjectId('586243795cd071f570ed3b39'), 'name': 'vvtj', 'passwd': 'iigbddauwj'}
{'_id': ObjectId('5862437a5cd071f570ed3b3a'), 'name': 'nh', 'passwd': 'upyufzknzgdc'}
{'_id': ObjectId('5862437a5cd071f570ed3b3b'), 'name': 'rgf', 'passwd': 'iqdlyjhztq'}
{'_id': ObjectId('5862437a5cd071f570ed3b3c'), 'name': 'dh', 'passwd': 'rgupzruqb'}
{'_id': ObjectId('586243e45cd071f570ed3b3e'), 'name': 'hcq', 'passwd': 'chiwwvxs'}
{'_id': ObjectId('586243e45cd071f570ed3b3f'), 'name': 'yrp', 'passwd': 'kiocdmeerneb'}
{'_id': ObjectId('586243e45cd071f570ed3b40'), 'name': 'hu', 'passwd': 'pknqgfnm'}
{'_id': ObjectId('5862440d5cd071f570ed3b43'), 'name': 'tlh', 'passwd': 'cikouuladgqn'}
{'_id': ObjectId('5862440d5cd071f570ed3b44'), 'name': 'qxf', 'passwd': 'jlsealrqeeel'}
{'_id': ObjectId('5862440d5cd071f570ed3b45'), 'name': 'vlzp', 'passwd': 'wolypmej'}
{'_id': ObjectId('58632e6c5cd07155543cc27a'), 'sid': 2, 'name': 'sgu', 'passwd': 'ogzvdq'}
{'_id': ObjectId('58632e6c5cd07155543cc27b'), 'sid': 3, 'name': 'jiyl', 'passwd': 'atgmhmxr'}
{'_id': ObjectId('58632e6c5cd07155543cc27c'), 'sid': 4, 'name': 'dbb', 'passwd': 'wmwoeua'}
{'_id': ObjectId('5863305b5cd07155543cc27d'), 'sid': 27, 'name': 'langchao', 'passwd': '123123'}
{'_id': ObjectId('5863305b5cd07155543cc27e'), 'sid': 28, 'name': 'oxp', 'passwd': 'acgjph'}
{'_id': ObjectId('5863305b5cd07155543cc27f'), 'sid': 29, 'name': 'sukj', 'passwd': 'hjtcjf'}
{'_id': ObjectId('5863305b5cd07155543cc280'), 'sid': 30, 'name': 'bf', 'passwd': 'cqerluvk'}
{'_id': ObjectId('5988087533fda81adc0d332f'), 'name': 'hg', 'passwd': 'gmflqxfaxxnv'}
{'_id': ObjectId('5988087533fda81adc0d3330'), 'name': 'ojb', 'passwd': 'rgxodvkprm'}
{'_id': ObjectId('5988087533fda81adc0d3331'), 'name': 'gtdj', 'passwd': 'zigavkysc'}
{'_id': ObjectId('5988087533fda81adc0d3332'), 'name': 'smgt', 'passwd': 'sizvlhdll'}
{'_id': ObjectId('5a33c1cb33fda859b82399d0'), 'name': 'dbu', 'passwd': 'ypdxtqjjafsm'}
{'_id': ObjectId('5a33c1cb33fda859b82399d1'), 'name': 'qg', 'passwd': 'frnoypez'}
{'_id': ObjectId('5a33c1cb33fda859b82399d2'), 'name': 'ky', 'passwd': 'jvzjtcfs'}
{'_id': ObjectId('5a33c1cb33fda859b82399d3'), 'name': 'glnt', 'passwd': 'ejrerztki'}
更新一条记录...
请输入记录的name:

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!