Python操作redis和mongoDB的方法


Posted in Python onDecember 19, 2019

一、操作redis

redis是一个key-value存储系统,value的类型包括string(字符串),list(链表),set(集合),zset(有序集合),hash(哈希类型)。为了保证效率,数据都是缓冲在内存中,在处理大规模数据读写的场景下运用比较多。

备注:默认redis有16个数据库,即db0~db15, 一般存取数据如果不指定库的话,默认都是存在db0中。

resid提供2种连接方式:直接连接、连接池连接

1、直接连接示例:

import redis             # pip3 install redis
# 创建redis连接对象
def init_redis():
  redis_config = {
    "host": "172.29.0.17",
    "port": 6379
  }
  global Redis_Conn
  Redis_Conn = redis.Redis(**redis_config)
  # Redis_Conn = redis.Redis(host='172.29.0.17', port=6379, db=1)  # 指定数据库
  
# 插入值,Value为str类型为例
def insert_redis_key_value(key,value):  
  Redis_Conn.set("name","Zhu")
# 获取值,Value为str类型为例
def get_redis_key_value(key):
  global Redis_Conn
  print("redis key value: %s" % Redis_Conn.get(key))

连接池的原理是, 通过预先创建多个连接, 当进行redis操作时, 直接获取已经创建的连接进行操作, 而且操作完成后, 不会释放, 用于后续的其他redis操作,这样就达到了避免频繁的redis连接创建和释放的目的, 从而提高性能。

redis模块采用ConnectionPool来管理对redis server的所有连接。

2、连接池连接示例:

import redis
pool = redis.ConnectionPool(host='172.29.0.17', port=6379,db=1) 
red = redis.Redis(connection_pool=pool) 
red.set('key1', 'value1') 
red.set('key2', 'value2')

二、操作mongoDB

1、mongoDB 是一个非关系型数据库(NoSQL),介于关系数据库和非关系数据库之间的产品。拥有很多优秀特性,例如高性能、高可用、支持丰富的查询语句、无需预定义数据模型和水平可伸缩等。

2、mongoDB是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。

3、mongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

4、mongoDB 的适用场景为:数据不是特别重要(例如通知,推送)、数据表结构变化较为频繁、数据量特别大、数据的并发性特别高、数据结构比较特别(例如地图的位置坐标),

这些情况下用 mongoDB , 其他情况就还是用MySQL ,这样组合使用就可以达到最大的效率。

import pymongo            # pip3 install pymongo
# 创建mongo连接对象
def init_mongo():
  global Mongo_Conn
  Mongo_Conn = pymongo.MongoClient(host="172.29.0.14", port=27017)
  admin = Mongo_Conn.admin
  admin.authenticate('root', '')
# 数据操作  
def get_mongo_key_value(token_id):
  db = Mongo_Conn['device_center']             # 创建数据库"device_center",命名为"db"
  col = db['token_info']                  # 创建集合"token_info",命名为"col"
  mydict = {"name": "Zhuyu", "alexa": "160", "sex": "male"}
  col.insert_one(mydict)                  # 插入一条数据
  mylist = [
  {"name": "ating", "alexa": "168", "sex": "male"},
  {"name": "Liang", "alexa": "165", "sex": "female"},
  {"name": "Libai", "alexa": "156", "sex": "female"}
  ]
  col.insert_one(mylist)                    # 插入一组数据
  query1 = col.find_one()                # 查询一条数据
  query2 = col.find({},{"alexa": 1})           # 查询指定字段的数据
  query3 = col.find()                  # 查询集合中的所有数据
  query4 = col.find({"name": "ating"})          # 根据指定条件查询
  myquery1 = { "alexa": "160" }
  newvalues1 = { "$set": { "alexa": "161" } }
  col.update_one(myquery1, newvalues1)           # 修改匹配到的第一条记录
  myquery2 = { "name": { "$regex": "^L" } }
  newvalues2 = { "$set": { "alexa": "123" } }
  col.update_many(myquery2, newvalues2)          # 修改所有匹配到的记录,将查找所有以 L 开头的 name 字段,并将匹配到所有记录的 alexa 字段修改为 123
  query5 = col.find().sort("alexa")           # sort() 方法第一个参数为要排序的字段,第二个字段指定排序规则,1 为升序,-1 为降序,默认为升序
  for x in query5 :
    print(x)
  # 结果
  {"name": "Libai", "alexa": "156", "sex": "female"}
  {"name": "Zhuyu", "alexa": "160", "sex": "male"}
  {"name": "Liang", "alexa": "165", "sex": "female"}
  {"name": "ating", "alexa": "168", "sex": "male"}
  query6 = col.find().sort("alexa",-1)          # 降序
  for x in query6:
    print(x)
  # 结果
  {"name": "ating", "alexa": "168", "sex": "male"}
  {"name": "Liang", "alexa": "165", "sex": "female"}
  {"name": "Zhuyu", "alexa": "160", "sex": "male"}
  {"name": "Libai", "alexa": "156", "sex": "female"}
  myquery3 = { "name": "Libai" }             # 删除一条数据
  mycol.delete_one(myquery3)
  myquery4 = { "name": {"$regex": "^L"} }        # 删除多个数据
  x1 = mycol.delete_many(myquery4)
  print(x1.deleted_count, "个文档已删除")        # 2个文档已删除
  x2 = mycol.delete_many({})               # 删除集合中的所有数据
  print(x2.deleted_count, "个文档已删除")        # 4个文档已删除
# 断开mongo连接  
def disconnect_mongo():
  Mongo_Conn.disconnect()

总结

以上所述是小编给大家介绍的Python操作redis和mongoDB的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python装饰器基础详解
Mar 09 Python
Python tkinter label 更新方法
Oct 11 Python
使用python分析统计自己微信朋友的信息
Jul 19 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
Aug 26 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
Aug 30 Python
详解Python3迁移接口变化采坑记
Oct 11 Python
Django连接数据库并实现读写分离过程解析
Nov 13 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
Apr 02 Python
Selenium向iframe富文本框输入内容过程图解
Apr 10 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
Sep 05 Python
Django实现在线无水印抖音视频下载(附源码及地址)
May 06 Python
Python 实现Serial 与STM32J进行串口通讯
Dec 18 #Python
实现Python与STM32通信方式
Dec 18 #Python
利用pandas将非数值数据转换成数值的方式
Dec 18 #Python
python 浅谈serial与stm32通信的编码问题
Dec 18 #Python
基于numpy中的expand_dims函数用法
Dec 18 #Python
Python.append()与Python.expand()用法详解
Dec 18 #Python
python getopt模块使用实例解析
Dec 18 #Python
You might like
功能齐全的PHP发送邮件类代码附详细说明
2008/07/10 PHP
解析PHP跨站刷票的实现代码
2013/06/18 PHP
php 购物车完整实现代码
2014/06/05 PHP
PHP精确计算功能示例
2016/11/29 PHP
RR vs IO BO3 第一场2.13
2021/03/10 DOTA
javascript 动态调整图片尺寸实现代码
2009/12/28 Javascript
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
使用js实现一个可编辑的select下拉列表
2014/02/20 Javascript
js实现图片旋转的三种方法
2014/04/10 Javascript
JS控制网页动态生成任意行列数表格的方法
2015/03/09 Javascript
nodejs中的fiber(纤程)库详解
2015/03/24 NodeJs
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
基于vuejs+webpack的日期选择插件
2020/05/21 Javascript
微信小程序 textarea 详解及简单使用方法
2016/12/05 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
Echarts基本用法_动力节点Java学院整理
2017/08/11 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
2017/10/09 Javascript
node 使用 async 控制并发的方法
2018/05/07 Javascript
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
2018/09/11 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
微信小程序实现页面分享onShareAppMessage
2019/08/12 Javascript
Vue实现购物车详情页面的方法
2019/08/20 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
2020/01/22 Javascript
原生JS实现萤火虫效果
2020/03/07 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
2020/11/26 Vue.js
python实现人人自动回复、抢沙发功能
2018/06/08 Python
Python常见的pandas用法demo示例
2019/03/16 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
英国最大的汽车交易网站:Auto Trader UK
2016/09/23 全球购物
EJB3推出JPA的原因
2013/10/16 面试题
环卫工作个人总结
2015/03/04 职场文书
2016创先争优活动党员公开承诺书
2016/03/24 职场文书
导游词之云南-元阳梯田
2019/10/08 职场文书
Python爬虫数据的分类及json数据使用小结
2021/03/29 Python
排查MySQL生产环境索引没有效果
2022/04/11 MySQL
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
2022/04/19 HTML / CSS