Python操作MySQL与Redis实战指南:连接、查询与常用命令详解

周予安
周予安
发布时间:2026-10-13| 2人浏览过
原创

本文详细介绍在Python中如何使用pymysql和redis模块连接并操作MySQL及Redis数据库。涵盖模块安装验证、MySQL的增删改查及游标控制,以及Redis中String和Hash类型的Set、Get、Delete操作。提供完整代码示例,包括连接配置、事务提交及异常处理,帮助开发者快速掌握数据库交互核心方法。

模块安装:

使用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')

通过Key值从Redis中获取数据。

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*'))

通过指定Key删除Redis中的值。

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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。