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中使用wxPython开发的一个简易笔记本程序实例
Feb 08 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
django之session与分页(实例讲解)
Nov 13 Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 Python
django连接mysql配置方法总结(推荐)
Aug 18 Python
Python 输入一个数字判断成绩分数等级的方法
Nov 15 Python
python使用response.read()接收json数据的实例
Dec 19 Python
python实现微信防撤回神器
Apr 29 Python
手动安装python3.6的操作过程详解
Jan 13 Python
python实现从尾到头打印单链表操作示例
Feb 22 Python
零基础小白多久能学会python
Jun 22 Python
Python基于mediainfo批量重命名图片文件
Dec 29 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下删除一篇文章生成的多个静态页面
2010/08/08 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
一种JavaScript的设计模式
2006/11/22 Javascript
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
jQuery 剧场版 你必须知道的javascript
2009/05/27 Javascript
离开页面时检测表单元素是否被修改,提示保存的js代码
2010/08/25 Javascript
js导出table到excel同时兼容FF和IE示例
2013/09/03 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
2016/11/09 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
2017/11/29 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
Python2.5/2.6实用教程 入门基础篇
2009/11/29 Python
windows下ipython的安装与使用详解
2016/10/20 Python
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
2018/03/13 Python
对pandas中apply函数的用法详解
2018/04/10 Python
Python利用openpyxl库遍历Sheet的实例
2018/05/03 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
2019/10/09 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
python输出国际象棋棋盘的实例分享
2020/11/26 Python
竞选班干部演讲稿400字
2014/08/20 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/10/28 职场文书
建议书范文
2015/02/05 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书
Python初识逻辑与if语句及用法大全
2021/08/07 Python
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
2022/04/11 PHP