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对两个有序列表进行合并和排序的例子
Jun 13 Python
在Python的Django框架中调用方法和处理无效变量
Jul 15 Python
python嵌套函数使用外部函数变量的方法(Python2和Python3)
Jan 31 Python
Python Requests模拟登录实现图书馆座位自动预约
Apr 27 Python
用pycharm开发django项目示例代码
Oct 24 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
对Python中一维向量和一维向量转置相乘的方法详解
Aug 26 Python
python修改FTP服务器上的文件名
Sep 11 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
Mar 18 Python
keras打印loss对权重的导数方式
Jun 10 Python
Django分页器的用法你都了解吗
May 26 Python
python 爬取华为应用市场评论
May 29 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
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
PHP mkdir()无写权限的问题解决方法
2014/06/19 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
JavaScript数值转换的三种方式总结
2014/07/31 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
2015/05/13 Javascript
详解JavaScript中数组的相关知识
2015/07/29 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
Node.js复制文件的方法示例
2016/12/29 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
js如何找出字符串中的最长回文串
2018/06/04 Javascript
js实现删除li标签一行内容
2019/04/16 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
浅谈Vue项目骨架屏注入实践
2019/08/05 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
2019/09/06 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
Python中的列表知识点汇总
2015/04/14 Python
Python单链表简单实现代码
2016/04/27 Python
Python正则匹配判断手机号是否合法的方法
2020/12/09 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
通过Python pyecharts输出保存图片代码实例
2020/11/25 Python
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
ManoMano英国:欧洲第一家专注于DIY和园艺市场的电商平台
2020/03/12 全球购物
关于梦想的演讲稿
2014/05/05 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
寻衅滋事罪辩护词
2015/05/21 职场文书
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS
Python机器学习之逻辑回归
2021/05/11 Python
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL