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
猜你喜欢
- 像素误差看自己设计好上线的网站,偶尔会发觉像素行间出现了弹性空间,总在不经意间蹦出一定的差距。有些页面很难发现,比如活动类页面,这类页面多呈
- 安装很简单pip install psutil官网地址为:https://pythonhosted.org/psutil/ (文档上有详细的
- 聊一聊Python与网络爬虫。1、爬虫的定义爬虫:自动抓取互联网数据的程序。2、爬虫的主要框架爬虫程序的主要框架如上图所示,爬虫调度端通过U
- 密码算法程序设计实践选的SHA-1。在写的过程中遇到一丢丢关于python移位的问题,记录一下。SHA-1其中第一步需要填充消息。简单阐述一
- 前言去年暑假参加了一个比赛,比赛内容中需要确定目标的位置 本来想全用图像完成的,最后发现不是很符合要求。比完赛之后,就忙别的事了。直到现在突
- 出自: 编程中国 http://www.bc-cn.net作者: 天涯听雨 &nbs
- 一、成员 1.1 变量实例变量,属于对象,每个对象中各自维护自己的数据。类变量,属于类,可以被所有对象共享,一般用于给对象提供公共
- django处理Ajax跨域访问使用javascript进行ajax访问的时候,出现如下错误出错原因:javascript处于安全考虑,不允
- 前言:在进行数据分析时,难免需要对数据集应用一些我们自定义的一些函数,或者其他库的函数,得到我们想要的数据,这种情况下,可能大家第一时间想到
- 一 安装oracle数据库成功之后,会显示相关的数据库信息: 全局数据库名:oracle 系统标识符(SID):oracle 服务器参数文件
- python配置文件有.conf,.ini,.txt等多种python集成的 标准库的 ConfigParser 模块提供一套 API 来读
- type指示type要使用的验证器。可识别的类型值为:string:类型必须为string。type 默认是 string// 校验stri
- 众所周知,binlog日志对于mysql数据库来说是十分重要的。在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定
- 问题:无法上传较大的文件“Request 对象 错误 'ASP 0104 : 80004005'”或者上传成功后,找不到文件
- Python里的正则表达式Python里的正则表达式,无需下载外部模块,只需要引入自带模块:re:import re官方re模块文档: ht
- 编写Python代码,大家都需要遵循PEP8,因此在pycharm中,如何设置每行最大长度限制,成为了一个小的知识盲点,在这里做一下记录,方
- 在这个星期Doug Bowman离开谷歌的Twitter引发了很多激烈的讨论.在残酷的诚实邮件中,Doug Bowman援引谷歌”限制性的数
- 目录项目地址:1) 启动方法2) web查看方法3) 功能说明:4) 展示:代码项目地址:https://github.com/guodon
- Python数据库接口支持非常多的数据库,你可以选择适合你项目的数据库:GadFlymSQL MySQL PostgreSQL Micros
- 为了方便的实现记录数据、修改数据没有精力去做一个完整的系统去管理数据。因此,在python的控制台直接实现一个简易的数据管理系统,包括数据的