python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
作者:沙振宇 发布时间:2024-01-22 03:53:51
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访问端口
效果
如果开了外网端口,用浏览器查看是否外网访问
MongoDB常用命令
连接mongoDB
/usr/local/mongodb/bin/mongo
效果
显示数据库列表
show dbs
效果
显示表单(集合)列表
# 切换分支
use mongodb_test
# 显示列表
show tables
# 显示列表
show collections
show tables 和 show collections 效果相同
效果
查询集合所有数据
db.col_test.find()
效果
Python3连接操作MongoDB
安装PyMongo
pip install pymongo
注意事项
注意,如果创建的数据库、表单中没有数据,是显示不出来数据库的。
显示数据库列表
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)
连接测试
db = my_client.test
print("db:", db)
testDB(my_client)
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数据库的技巧请查看下面的相关链接
来源:https://blog.csdn.net/u014597198/article/details/92841495


猜你喜欢
- CSS选择器目前,除了官方文档之外,市面上及网络详细介绍BeautifulSoup使用的技术书籍和博客软文并不多,而在这仅有的资料中介绍CS
- 看下面的例子, var btn = document.getElementById('mybtn'); btn.onclic
- python中基本数据类型和其他的语言占用的内存空间大小有很大差别import sysa = 100b = Truec = 100Ld =
- MySQL 数据(字段)类型在创建表的时候,要明确定义字段对应的数据类型。MySQL 主要的数据类型分为数值类型、字符串(文本)类型、时间日
- 此文章主要向大家描述的是Java连接MYSQL 数据库(以MySQL为例)的实际操作步骤,我们是以相关实例的方式来引出Java连接MYSQL
- 目录1. 折线图概述1.1什么是折线图?1.2折线图使用场景1.3绘制折线图步骤1.4案例展示2. 折线2D属性2.1linestyle:折
- 本文实例讲述了Python处理XML格式数据的方法。分享给大家供大家参考,具体如下:这里的操作是基于Python3平台。在使用Python处
- 开门见山,直接以例子介绍: 代码如下:CREATE TABLE [dbo].[course]( [id] [int] NULL,
- #/usr/bin/env python#-*- coding:utf-8 -*-"""1.解析 cronta
- 一、concat()函数1、功能:将多个字符串连接成一个字符串。2、语法:concat(str1, str2,...)返回结果为连接参数产生
- python实现MySQL指定表增量同步数据到clickhouse,脚本如下:#!/usr/bin/env python3# _*_ cod
- openCV是一个开源的用C/C++开发的计算机图形图像库,非常强大,研究资料很齐全。本文重点是介绍如何使用php来调用其中的局部的功能。人
- 因为外贸网站,禁止同行抄袭,所以防止中国ip访问访问,访问的时候有密码提示,这样的代码如何写.请给一个提示.或者有好的代码,请分享下。 &n
- 本文为大家分享了Eclipse开发python脚本的具体方法,供大家参考,具体内容如下一、安装python1.访问网址,可以看到如下图所示界
- 近年来,广告已成为很多网站的主要收入来源。不久前,在线广告往往遭到访客的拒绝,广告客户也不确定它的价值和效力。今天,大多数访客期望在商业网站
- 本文实例讲述了Python实现阿拉伯数字和罗马数字的互相转换功能。分享给大家供大家参考,具体如下:前面一篇介绍了《Java实现的求解经典罗马
- 用python操作ms sqlserver,有好几种方法:(1)利用pymssql (2)利用pyodbc这里讲import&nb
- 现在的垃圾留言越来越智能,并且从留言内容几乎看不出来是垃圾留言,而大量的垃圾留言会导致文章可读性下降,并可能会被搜索引擎惩罚,经过一段时间的
- 一、文本文件文本文件,主要包括csv和txt两种等,相应接口为read_csv()和to_csv(),分别用于读写数据1. read_csv
- 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的