python笔记:mysql、redis操作方法


Posted in Python onJune 28, 2017

模块安装:

数据操作用到的模块pymysql,需要通过pip install pymysql进行安装。

redis操作用的模块是redis,需要通过pip install redis进行安装。

检验是否安装成功:进入到Python命令行模式,输入import pymysql、 import redis ,无报错代表成功;

mysql操作方法如下:

查询数据:fetchone、fetchmany(n)、fetchall()

import pymysql
#建立mysql连接,ip、端口、用户名、密码(passwd,不能写成其他,例如:pwd或者p,否则报错)、库名
conn = pymysql.connect(host='127.0.0.1', user='root', passwd='123456', db='szz', port=3306, charset='utf8')
#创建游标
cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #指定cursor的类型为字典,返回结果类型是字典,不再是元组
#执行sql,返回值是int,查询出来的结果有几条
cur.execute('select * from test')
#获取第一条数据,游标cur所在的位置为1,游标从0开始,查询结果类型为:字典
row_1 = cur.fetchone()
cur.scroll(0, mode='absolute')  #将游标移动到初始位置
#获取前n行数据
row_2 = cur.fetchmany(n)
cur.scroll(0, mode='absolute')  #将游标移动到初始位置
#获取所有数据,返回结果类型是:list,里面元素是字典
row_3 = cur.fetchall()
cur.scroll(0, mode='absolute')  #将游标移动到初始位置
print(row_2)
#关闭游标
cur.close()
#关闭连接
conn.close()

增加、更新、删除数据

import pymysql
#建立mysql连接
conn = pymysql.connect(host='127.0.0.1', user='root', passwd='123456', db='szz', port=3306, charset='utf8')
#创建游标
cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #指定cursor的类型为字典,返回结果类型是字典,不再是元组
#执行sql
sql = 'insert into test values(5, "断点", "e10adc3949ba59abbe56e057f20f883e")'
sql_update = 'update test set name="薛之谦" where id=2 '
sql_del = 'delete from test where id = 3'
cur.execute(sql_del)
#insert、update、delete语句需要进行commit,否则无法保证修改或者新建的数据
conn.commit()
#关闭游标
cur.close()
#关闭连接
conn.close()

cursor的相对、绝对位置移动

import pymysql
#建立mysql连接
conn = pymysql.connect(host='192.168.3.66', user='root', passwd='123456', db='szz', port=3306, charset='utf8')
#创建游标
cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #指定cursor的类型为字典,返回结果类型是字典,不再是元组
num = cur.execute('select * from testlhl')
print(num)                      #返回结果是int类型

row_1 = cur.fetchone()       # 此时游标的位置在1,数据库取值从0下标开始,获取数据库第一条数据
cur.scroll(2, mode='absolute')   #absolute绝对位置,直接是将游标从0位置移动到指定的位置2
row_2 = cur.fetchone()       #读取数据库第3条数据,游标在3位置
cur.scroll(2, mode='relative')   #relative相对位置,相对于游标当前所在位置,进行移动,移动1位,游标在4位置,若相对移动的位置超过下标,则报out of range
row_3 = cur.fetchone()       #读取第5条数据
#关闭游标
cur.close()
#关闭连接
conn.close()

mysql的增删改查公共方法,代码如下:

def getconn(host, user, passwd, db, sql, port=3306,charset='utf8'):
  conn = pymysql.connect(host=host, user=user, passwd=passwd, port=port, db=db, charset=charset) #建立连接
  cur = conn.cursor(cursor=pymysql.cursors.DictCursor)    #建立游标并指定游标类型
  cur.execute(sql)                      #执行sql
  if sql.startswith('select'):                #判断sql是否是select
    res = cur.fetchone()
  else:
    conn.commit()                      #insert\delete\update语句执行完毕后需要进行commit
    res = 88
  cur.close()                         #关闭游标
  conn.close()                        #关闭连接
  return res

redis操作方法如下:

key的类型是string,进行set操作,模式{key, value},如下:

import redis
db = 0
#连接redis,password不简写(否则或报错),db若不写,则默认操作db0
conn_redis = redis.Redis(host='127.0.0.1', port=6379, password='123456', db=db)
#给redis添加值,传值方式是key-value,key不可重复,value的形式尽量是string,也可以传list、字典,redis内存放的是字节res = conn_redis.set('name', 'testredis')
#print(res)  #返回值是布尔类型,set成功,则返回true
conn_redis.set('days', '[10,4,5,12,44]')

#set key值到redis内,且可以设置过期时间,10s
result = conn_redis.setex('session', 'abcder1233@sdfrr', 10)  #单位是s
print(result)  #返回值是布尔类型,set成功,则返回true

#批量插入redis,可以写入多个key-valye
conn_redis.mset(a='xiaohei', b='xiaobai', c='xiaohuang') 
#设置key时,可以设置文件夹,user文件夹,key:test,value:haha
conn_redis.set('user:test','haha')

获取redis内的数据,通过key值进行获取

import redis
import json
db = 0
#连接redis,password不简写(否则或报错),db若不写,则默认操作db0
conn_redis = redis.Redis(host='127.0.0.1', port=6379, password='123456', db=db)
#获取redis的值,返回结果类型是bytes
res = conn_redis.get('abcd')
#使用decode()将bytes类型转换为字符串:输出>>>>>testredis
new_res = res.decode()
#使用json的loads,将json串(字符串)转换为字典
dic_res = json.loads(new_res)

#获取不存在的key,返回结果为None
res1 = conn_redis.get('asdfg')
print(res1.decode())    #输出>>>>>>'NoneType' object has no attribute 'decode'

#获取所有的keys,且循环遍历进行输入,使用decode()转换为字符串
list_keys = conn_redis.keys()
for key in list_keys:
  print(key.decode())

#获取所有的key中以n开头的key,返回结果类型是list,元素类型是bytes 输出>>>>>[b'nbeee', b'name', b'nest']
print(conn_redis.keys('n*'))

删除redis内的值,通过key删除

import redis
db = 0
#连接redis,password不简写(否则或报错),db若不写,则默认操作db0
conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db)
#删除存在的key,删除key后,redis内不存在该key,返回结果为1,删除了一个key
res = conn_redis.delete('a')
#删除不存在的key,返回结果为0,没有删除key
res1 = conn_redis.delete('d')
#删除多个key,返回结果n, 删除了几个key就返回数字几
asdf = conn_redis.delete('a', 'b', 'c')
print(asdf)

key的类型是hash,进行set操作,模式:{key,{key1,value}}如下

import redis
db = 0
#连接redis,password不简写(否则或报错),db若不写,则默认操作db0
conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db)
#hash类型的key,模式{name,{key,value}},里面key不能重复,返回值为int
res = conn_redis.hset('user_session', 'lhl', 'sunny')
#hash类型的key,添加值时也可以设置文件夹
conn_redis.hset('session:redis_test', 'age', 18)

key的类型是hash,进行get操作,如下

import redis
db = 0
#连接redis,password不简写(否则或报错),db若不写,则默认操作db0
conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db)
#获取hash类型中的某个name下的某个key对应的value ,获取指定name里面的key的值,返回结果类似是bytes
res = conn_redis.hget('user_session', 'week')
#获取hash类型中name里面所有的key,返回结果是字典>>>>>输出:{b'test': b'sunny', b'week': b'sunny'}
all = conn_redis.hgetall('user_session')

key的类型是hash,进行delete操作,如下

import redis
db = 0
#连接redis,password不简写(否则或报错),db若不写,则默认操作db0
conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db)
#hash类型的key,删除整个key, delete(name),返回结果为1
res = conn_redis.delete('user_session')
#hash类型的key,删除指定name里的key,若删除的key或者name不存在,则返回0
res = conn_redis.hdel('user_session', 'week')

redis的set、get公共操作方法如下

def opRedis(host, password, key, value=None, port=6379,db=0):   #redis操作时需要传入key\value
  conn_redis = redis.Redis(host=host, password=password, port=port, db=db)  #获取redis连接
  if value:              #判断value是否传值,如果不为None,则是set
    conn_redis.setex(key, value, 60)  #设置key的过期时间,60s
    res = 88
  else:
    res = conn_redis.get(key).decode()   #将从redis内读取的值,由bytes转换为字符串
  return res

以上这篇python笔记:mysql、redis操作方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
Jun 10 Python
Python实现扫描局域网活动ip(扫描在线电脑)
Apr 28 Python
解决Python 遍历字典时删除元素报异常的问题
Sep 11 Python
Mac 上切换Python多版本
Jun 17 Python
Python绘制3d螺旋曲线图实例代码
Dec 20 Python
详解python的ORM中Pony用法
Feb 09 Python
python如何为被装饰的函数保留元数据
Mar 21 Python
python向已存在的excel中新增表,不覆盖原数据的实例
May 02 Python
python 读取txt,json和hdf5文件的实例
Jun 05 Python
python 实现提取某个索引中某个时间段的数据方法
Feb 01 Python
安装好Pycharm后如何配置Python解释器简易教程
Jun 28 Python
Win10环境python3.7安装dlib模块趟过的坑
Aug 01 Python
老生常谈Python序列化和反序列化
Jun 28 #Python
python flask实现分页效果
Jun 27 #Python
Django自定义分页效果
Jun 27 #Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
Jun 27 #Python
最近Python有点火? 给你7个学习它的理由!
Jun 26 #Python
Python的装饰器使用详解
Jun 26 #Python
Python学习思维导图(必看篇)
Jun 26 #Python
You might like
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
2010/01/22 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
2015/03/20 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
2015/10/19 Javascript
nodejs 的 session 简单使用
2016/06/06 NodeJs
webpack vue项目开发环境局域网访问方法
2018/03/20 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
2018/06/19 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
JS可断点续传文件上传实现代码解析
2020/07/30 Javascript
[01:52]2014DOTA2西雅图邀请赛 V社开大会你不知道的小秘密
2014/07/08 DOTA
[04:11]2014DOTA2国际邀请赛 CIS遗憾出局梦想不灭
2014/07/09 DOTA
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
python文件与目录操作实例详解
2016/02/22 Python
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
python逆序打印各位数字的方法
2018/06/25 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
基于python的docx模块处理word和WPS的docx格式文件方式
2020/02/13 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
使用Python构造hive insert语句说明
2020/06/06 Python
Django websocket原理及功能实现代码
2020/11/14 Python
Python截图并保存的具体实例
2021/01/14 Python
html5唤醒APP小记
2019/03/27 HTML / CSS
美国杂志订阅折扣与优惠网站:Magazines.com
2016/08/31 全球购物
MATCHESFASHION澳大利亚/亚太地区:英国时尚奢侈品电商
2020/01/14 全球购物
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
机械工程师求职自我评价
2013/09/23 职场文书
应届行政管理专业个人自我评价
2013/12/28 职场文书
学生实习证明模板汇总
2014/09/25 职场文书
2016年国庆节假期旅游工作总结
2016/04/01 职场文书
2016年庆“七一”主题党日活动总结
2016/04/05 职场文书
如何用python清洗文件中的数据
2021/06/18 Python
Python turtle编写简单的球类小游戏
2022/03/31 Python