python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例


Posted in Python onMarch 18, 2020

MongoDB简介

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

在高负载的情况下,添加更多的节点,可以保证服务器性能。

MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

MongoDB应用场景

  • 大而复杂的数据
  • 移动和社会基础设施数据
  • 内容管理和交付
  • 用户数据
  • 管理数据中心

MongoDB优点

  • MongoDB 的架构较少。它是一个文档数据库,它的一个集合持有不同的文档。
  • 从一个到另一个的文档的数量,内容和大小可能有差异。
  • MongoDB 中单个对象的结构很清淅。
  • MongoDB 中没有复杂的连接。
  • MongoDB 提供深度查询的功能,因为它支持对文档的强大的动态查询。
  • MongoDB 很容易扩展。
  • 它使用内部存储器来存储工作集,这是其快速访问的原因。

MongoDB缺点

  • 不支持事务操作
  • 占用空间过大
  • MongoDB没有如MySQL那样成熟的维护工具
  • 无法进行关联表查询,不适用于关系多的数据
  • 复杂聚合操作通过mapreduce创建,速度慢
  • 模式自由, 自由灵活的文件存储格式带来的数据错误

CentOSP安装MongoDB

下载安装MongoDB

下载 3.0.6 版本

curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz

安装

tar -zxvf mongodb-linux-x86_64-3.0.6.tgz

移动文件夹

mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb

增加环境变量

export PATH=/usr/local/mongodb/bin:$PATH

启动MongoDB

nohup /usr/local/mongodb/bin/mongod --dbpath=/data/db --rest > /usr/local/mongodb/mongo.log 2>&1 &

查看是否启动

netstat -tnlp|grep mongo

端口

27017是默认开的mongodb端口,28017是默认的web访问端口

效果

python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例

如果开了外网端口,用浏览器查看是否外网访问

python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例

MongoDB常用命令

连接mongoDB

/usr/local/mongodb/bin/mongo

效果

python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例

显示数据库列表

show dbs

效果

python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例

显示表单(集合)列表

# 切换分支
use mongodb_test
# 显示列表
show tables
# 显示列表
show collections

show tables 和 show collections 效果相同

效果

python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例

查询集合所有数据

db.col_test.find()

效果

python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例

Python3连接操作MongoDB

安装PyMongo

 pip install pymongo

注意事项

注意,如果创建的数据库、表单中没有数据,是显示不出来数据库的。

python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例

显示数据库列表

from pymongo import MongoClient
client_ip = "193.112.61.11"
client_port = 27017
my_client = MongoClient(client_ip, client_port)
db_list = my_client.list_database_names() 
print("数据库列表:",db_list)

python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例

连接测试

db = my_client.test
print("db:", db) 
testDB(my_client)

python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例

db_name = 'mongodb_test'
my_db = my_client[db_name]

表单(集合)列表

col_list = my_db.list_collection_names()

没有此表单就创建这个表单,有此表单就连接这个表单

sheet_tab_one = my_db[name]

Python3增删改查MongoDB数据

增加一条数据

# 删除一条数据
def delData_one(my_col, myquery):
  result = my_col.delete_one(myquery)
  print(result.deleted_count,"数据已删除")

增加多条数据

# 删除多条数据
def delData_many(my_col, myquery):
  result = my_col.delete_many(myquery)
  print(result.deleted_count,"数据已删除")

删除数据

# 删除一条数据
def delData_one(my_col, myquery):
  result = my_col.delete_one(myquery)
  print(result.deleted_count,"数据已删除")

删除多条数据

# 删除多条数据
def delData_many(my_col, myquery):
  result = my_col.delete_many(myquery)
  print(result.deleted_count,"数据已删除")

删除一个表单

# 删除一个表单
def delCol(my_col):
  my_col.drop()
  print("删除表单成功")

更新数据

# 修改匹配到的第一条数据
def updateData_one(my_col, myquery, new_val):
  result = my_col.update_one(myquery, new_val)
  print(result.modified_count, "文档已修改")
# 修改匹配到的多条数据
def updateData_many(my_col, myquery, new_val):
  result = my_col.update_many(myquery, new_val)
  print(result.modified_count, "文档已修改")

查询数据

# 查询一条数据
def searchData_one(my_col):
  result = my_col.find_one()
  print(result)
# 查询集合中所有数据
def searchData_many(my_col, limit = 0):
  for item in my_col.find().limit(limit):
    print(item)

根据指定条件查询 或者 正则表达式查询

# my_query = {"name": "ShaShiDi"} # 根据指定条件查询
# my_query = {"name": {"$regex": "^S"}} # 以下实例用于读取 name 字段中第一个字母为 "S" 的数据
# 根据指定条件查询 或者正则表达式查询(比如 my_query = { "name": { "$regex": "^S" } })
def searchData_miss(my_col, my_query):
  print("根据指定条件查询: ", my_query)
  my_doc = my_col.find(my_query)
  for item in my_doc:
    print(item)

排序数据

# 按照某字段排序 默认True是正序,False是倒序
def sortData(my_col, my_key, sortB = True):
  if sortB:
    my_doc = my_col.find().sort(my_key)
  else:
    my_doc = my_col.find().sort(my_key, -1)
  for item in my_doc:
    print(item)

Python3操作MongoDB完整源码

from pymongo import MongoClient
# 数据库列表
def ifnotDB(my_client, db_name):
  db_list = my_client.list_database_names()
  print("数据库列表:",db_list)
  if db_name in db_list:
    print("%s 数据库已存在!"%db_name)
  else:
    print("%s 数据库不存在!"%db_name)
# 测试数据库是否连接成功 返回测试结果
def testDB(my_client):
  db = my_client.test
  print("db:", db)
  return db
# 创建一个数据库 返回数据库对象
def creatDB(my_client, name):
  my_db = my_client[name]
  ifnotDB(my_client, name)
  return my_db
# 表单列表
def ifnotCol(my_db, col_name):
  col_list = my_db.list_collection_names()
  if col_name in col_list:
    print("%s 集合已存在!"%col_name)
  else:
    print("%s 集合不存在!"%col_name)
# 创建一个表单 返回表单对象
def creatCol(my_db, name):
  sheet_tab_one = my_db[name]
  ifnotCol(my_db, name)
  return sheet_tab_one
# 增加一条数据 返回_id
def addData_one(my_col, my_json):
  result = my_col.insert_one(my_json)
  print(result.inserted_id,"增加一条数据")# 返回 _id 字段
  return result.inserted_id
# 增加多条数据 返回所有文档对应的 _id 值
def addData_many(my_col, my_jsons):
  result = my_col.insert_many(my_jsons)
  print(result.inserted_ids)
  return result.inserted_ids
# 删除一条数据
def delData_one(my_col, myquery):
  result = my_col.delete_one(myquery)
  print(result.deleted_count,"数据已删除")
# 删除多条数据
def delData_many(my_col, myquery):
  result = my_col.delete_many(myquery)
  print(result.deleted_count,"数据已删除")
# 删除一个表单
def delCol(my_col):
  my_col.drop()
  print("删除表单成功")
# 修改匹配到的第一条数据
def updateData_one(my_col, myquery, new_val):
  result = my_col.update_one(myquery, new_val)
  print(result.modified_count, "文档已修改")
# 修改匹配到的多条数据
def updateData_many(my_col, myquery, new_val):
  result = my_col.update_many(myquery, new_val)
  print(result.modified_count, "文档已修改")
# 按照某字段排序 默认True是正序,False是倒序
def sortData(my_col, my_key, sortB = True):
  if sortB:
    my_doc = my_col.find().sort(my_key)
  else:
    my_doc = my_col.find().sort(my_key, -1)
  for item in my_doc:
    print(item)
# 查询一条数据
def searchData_one(my_col):
  result = my_col.find_one()
  print(result)
# 查询集合中所有数据
def searchData_many(my_col, limit = 0):
  for item in my_col.find().limit(limit):
    print(item)
# 根据指定条件查询 或者正则表达式查询(比如 my_query = { "name": { "$regex": "^S" } })
def searchData_miss(my_col, my_query):
  print("根据指定条件查询: ", my_query)
  my_doc = my_col.find(my_query)
  for item in my_doc:
    print(item)
if __name__ == "__main__":
  client_ip = "服务器IP地址"
  client_port = 27017
  db_name = 'mongodb_test'
  col_name = 'col_test'
  my_json = {"name": "ShaShiDi", "url": "https://shazhenyu.blog.csdn.net/"}
  # 可以指定_id 我们也可以自己指定 id,插入
  my_jsons = [{"_id": 1,"name": "sha", "url": "https://www.shazhenyu.com"},{"_id": 2,"name": "sha2", "url": "https://shazhenyu.com"}]
  my_query = {"name": "ShaShiDi"}
  my_query_regex = {"name": {"$regex": "^S"}} # 以下实例用于读取 name 字段中第一个字母为 "S" 的数据
  my_key = "_id"
  new_values = {"$set": {"name": "ShaShiDi_new"}}
  my_client = MongoClient(client_ip, client_port)
  testDB(my_client)
  my_db = creatDB(my_client,db_name)
  my_col = creatCol(my_db,col_name)
  # # 增加一条数据
  # addData_one(my_col, my_json)
  # # 增加多条数据
  # addData_many(my_col, my_jsons)
  # # 删除一个符合条件的集合
  # delData_one(my_col, my_query)
  # # 删除所有符合条件的集合
  # delData_many(my_col, my_query)
  # # 删除该集合中的所有文档
  # delData_many(my_col, {})
  # # 删除表单
  # delCol(my_col)
  # # 修改第一个匹配到的文档
  # updateData_one(my_col, my_query, new_values)
  # # 修改所有符合条件的文档
  # updateData_many(my_col, my_query, new_values)
  # # 按照某字段排序 默认True是正序,False是倒序
  # sortData(my_col, my_key)
  # # 根据指定条件查询
  # searchData_miss(my_col, my_query)
  # # 根据正则表达式查询
  # searchData_miss(my_col, my_query_regex)
  # # 查询集合中所有数据 如果写第二个参数,就是指定条数记录查询
  # # searchData_many(my_col)
  # searchData_many(my_col,2)

本文主要讲解了MongoDB安装及Python3操作MongoDB数据库详细方法与实例,更多关于Python3操作MongoDB数据库的技巧请查看下面的相关链接

Python 相关文章推荐
Python抓取京东图书评论数据
Aug 31 Python
Python制作数据导入导出工具
Jul 31 Python
python模拟表单提交登录图书馆
Apr 27 Python
Django contenttypes 框架详解(小结)
Aug 13 Python
python 将字符串中的数字相加求和的实现
Jul 18 Python
让你的Python代码实现类型提示功能
Nov 19 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
Mar 30 Python
一文读懂Python 枚举
Aug 25 Python
python exit出错原因整理
Aug 31 Python
python实现简单的五子棋游戏
Sep 01 Python
python遍历路径破解表单的示例
Nov 21 Python
python 获取谷歌浏览器保存的密码
Jan 06 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
Mar 18 #Python
selenium+python配置chrome浏览器的选项的实现
Mar 18 #Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
Mar 18 #Python
python selenium操作cookie的实现
Mar 18 #Python
Selenium 滚动页面至元素可见的方法
Mar 18 #Python
python字符串判断密码强弱
Mar 18 #Python
详解Python3中的 input() 函数
Mar 18 #Python
You might like
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
解析使用ThinkPHP应该掌握的调试手段
2013/06/20 PHP
PHP中4种常用的抓取网络数据方法
2015/06/04 PHP
PHP模型Model类封装数据库操作示例
2019/03/14 PHP
阿里对象存储OSS在laravel框架中的使用方法
2019/10/13 PHP
Laravel实现ORM带条件搜索分页
2019/10/24 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
JS控制网页动态生成任意行列数表格的方法
2015/03/09 Javascript
JavaScript通过select动态更换图片的方法
2015/03/23 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
2015/04/20 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
JS实现的仿东京商城菜单、仿Win右键菜单及仿淘宝TAB特效合集
2015/09/28 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
2018/08/17 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
JavaScript实现五子棋小游戏
2020/10/26 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
Numpy数组的广播机制的实现
2020/11/03 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
BRASTY捷克:购买香水、化妆品、手袋和手表
2017/07/12 全球购物
墨尔本照明批发商店:Mica Lighting
2017/12/28 全球购物
简单说说tomcat的配置
2013/05/28 面试题
班级活动策划书
2014/02/06 职场文书
工作态度检讨书
2014/02/11 职场文书
学校爱心捐款倡议书
2014/05/13 职场文书
好听的队名和口号
2014/06/09 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
小学英语新课改心得体会
2016/01/22 职场文书