(2-4)使用数据库保存数据:使用MongoDB数据库

2.4  使用MongoDB数据库

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

2.4.1  搭建MongoDB环境

(1)在MongoDB官网中提供了可用于32位和64位系统的预编译二进制包,读者可以从MongoDB官网下载安装包,下载地址是https://www.mongodb.com/download-center#enterprise。如图2-15所示。

图2-15  MongoDB下载页面

(2)根据当前计算机的操作系统选择下载安装包,因为笔者是64位的Windows系统,所以选择“Windows x64”,然后单击“Download”按钮。在弹出的界面中选择“msi”,如图2-16所示。

(3)下载完成后得到一个“.msi”格式文件,鼠标双击这个文件,然后按照操作提示进行安装即可。安装界面如图2-17所示。

                    图2-16  选择“msi”                                                       图2-17  安装界面

2.4.2  在Python程序中使用MongoDB数据库

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

pip install pymongo

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

easy_install pymongo

安装完成后的界面效果如图2-18所示。

图2-18  安装完成后的界面效果

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

源码路径:codes\2\2-4\mdb.py

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服务成功时的界面效果如图2-19所示。

图2-19  开启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:

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农三叔

感谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值