当前位置:Gxlcms > 数据库问题 > python笔记7:mysql、redis操作

python笔记7:mysql、redis操作

时间:2021-07-01 10:21:17 帮助过:20人阅读

数据操作用到的模块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的增删改查公共方法,代码如下:

 1 def getconn(host, user, passwd, db, sql, port=3306,charset=utf8):
 2     conn = pymysql.connect(host=host, user=user, passwd=passwd, port=port, db=db, charset=charset)  #建立连接
 3     cur = conn.cursor(cursor=pymysql.cursors.DictCursor)        #建立游标并指定游标类型
 4     cur.execute(sql)                                            #执行sql
 5     if sql.startswith(select):                                #判断sql是否是select
 6         res = cur.fetchone()
 7     else:
 8         conn.commit()                                           #insert\delete\update语句执行完毕后需要进行commit
9 res = 88 10 cur.close() #关闭游标 11 conn.close() #关闭连接 12 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值进行获取:

 1 import redis
 2 import json
 3 db = 0
 4 #连接redis,password不简写(否则或报错),db若不写,则默认操作db0
 5 conn_redis = redis.Redis(host=127.0.0.1, port=6379, password=123456, db=db)
 6 #获取redis的值,返回结果类型是bytes
 7 res = conn_redis.get(abcd)
 8 #使用decode()将bytes类型转换为字符串:输出>>>>>testredis
 9 new_res = res.decode()
10 #使用json的loads,将json串(字符串)转换为字典
11 dic_res = json.loads(new_res)
12 
13 #获取不存在的key,返回结果为None
14 res1 = conn_redis.get(asdfg)
15 print(res1.decode())       #输出>>>>>>‘NoneType‘ object has no attribute ‘decode‘
16 
17 #获取所有的keys,且循环遍历进行输入,使用decode()转换为字符串
18 list_keys = conn_redis.keys()
19 for key in list_keys:
20     print(key.decode())
21 
22 #获取所有的key中以n开头的key,返回结果类型是list,元素类型是bytes  输出>>>>>[b‘nbeee‘, b‘name‘, b‘nest‘]
23 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公共操作方法如下:

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

有写的不对的,或者不明白的,欢迎留言~~~~

 

python笔记7:mysql、redis操作

标签:开始   修改   mode   操作方法   sof   游标   mysql操作   ssi   port   

人气教程排行