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 使用SMTP发送邮件的代码小结
Sep 21 Python
python3+PyQt5+Qt Designer实现扩展对话框
Apr 20 Python
基于Pandas读取csv文件Error的总结
Jun 15 Python
使用PyQt4 设置TextEdit背景的方法
Jun 14 Python
Kali Linux安装ipython2 和 ipython3的方法
Jul 11 Python
常用python爬虫库介绍与简要说明
Jan 25 Python
Python中用pyinstaller打包时的图标问题及解决方法
Feb 17 Python
Tensorflow中的dropout的使用方法
Mar 13 Python
django rest framework 过滤时间操作
Jul 12 Python
Python 如何在字符串中插入变量
Aug 01 Python
python爬虫多次请求超时的几种重试方法(6种)
Dec 01 Python
Matplotlib绘制条形图的方法你知道吗
Mar 21 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
php中计算时间差的几种方法
2009/12/31 PHP
PHP实现JS中escape与unescape的方法
2016/07/11 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
jquery tab插件精简版分享
2011/09/10 Javascript
基于jquery的放大镜效果
2012/05/30 Javascript
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
seajs1.3.0源码解析之module依赖有序加载
2012/11/07 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
JavaScript数字和字符串转换示例
2014/03/26 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
JavaScript二维数组实现的省市联动菜单
2014/05/08 Javascript
基于jQuery实现动态数字展示效果
2015/08/12 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
2016/03/14 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
js实现文本上下来回滚动
2017/02/03 Javascript
常见的浏览器Hack技巧整理
2017/06/29 Javascript
详解angular笔记路由之angular-router
2017/09/12 Javascript
JavaScript 五大常见函数
2018/03/23 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
vue学习笔记之给组件绑定原生事件操作示例
2020/02/27 Javascript
Python中列表元素转为数字的方法分析
2016/06/14 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
python3 实现调用串口功能
2019/12/26 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
python中JWT用户认证的实现
2020/05/18 Python
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
物业管理个人自我评价
2013/11/08 职场文书
2014年小学元旦活动方案
2014/02/12 职场文书
大学班级计划书
2014/04/29 职场文书
2014年幼儿园教研工作总结
2014/12/04 职场文书