热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python数据库操作指南:MySQL与Redis实战技巧

本文详细介绍了使用Python进行MySQL和Redis数据库操作的实战技巧。首先,针对MySQL数据库,通过`pymysql`模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了Redis的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。
一、python操作mysql数据库:

数据库信息:(例如211.149.218.16   szz  123456)

操作mysql用pymysql模块                  

#操作其他数据库,就安装相应的模块

import  pymysql

ip=’211.149.218.16’

port=3306

passwd=’123456’

user=’root’

db=’szz’

cOnn=pymysql.connect(host=ip,user=user,port=port,passwd=passwd,db=db,charset=’utf8’)         #创建一个数据库连接

cur = conn.cursor(cursor=pymysql.cursors.DictCursor)             #在连接上创建一个游标,通过游标去操作数据库;括号里指定游标的类型为字典(指定为字典,方便取值),不指定默认为元组

sql=’insert into nhy(id,name,sex) VALUE (1,’hn’,’nv’);’               #写sql语句

sql2=’select * from nhy;’

cur.execute(sql)               #执行sql语句

cur.execute(sql2)

row_1 = cur.fetchone()                    #获取查询结果的第一条数据,返回的是一个元组,每执行一次就获取一行

row_2 = cur.fetchmany(3)                     # 获取前n行数据,此时游标在n条数据后面

row_3 = cur.fetchall()              # 获取所有数据,此时游标在最后面

PS:(

fetchall和fetchone的区别:

如果select本身取的时候有多条数据时:

cursor.fetchone():将只取最上面的第一条结果,返回单个元组如(‘id‘  ,‘title‘),   然后多次使用cursor.fetchone(),依次取得下一条结果,直到为空。

cursor.fetchall() :将返回所有结果,返回二维元组,如((‘id‘,‘title‘),(‘id‘,‘title‘)),

如果select本身取的时候只有一条数据时:

cursor.fetchone():将只返回一条结果,返回单个元组如(‘id‘,‘title‘)。

cursor.fetchall() :也将返回所有结果,返回二维元组,如((‘id‘,‘title‘),),

cur.scroll(n,mode=’absolute’)         #移动游标,mode=absolute或relative, absolute指把游标移到数据的第n行,relative的意思是把游标移动到当前游标所在行+n行的位置

cur.scroll(0,mode=’absolute’)             #把游标移动到最前面,不管游标在哪

conn.commit()           #ddl(insert delete update)dcl dml语句必须提交才生效,不然无法保存新建或者修改的数据

cur.close()             #关闭游标

conn.close()               #关闭数据库连接

======eg:写操作mysql的函数:

import pymysql

def OperationDb(host,user,passwd,port,db,sql,charset=‘utf8‘):  #传参

         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‘):   #判断字符串是不是以什么开头

                   res=cur.fetchall()     #判断如果是select语句,直接返回出执行结果,不用commit了

         else:

                   conn.commit()   #如果是insert delete update等语句,则需要提交

                   res=00   #如果不是select语句,返回00

         cur.close()

         conn.close()

         return  res

ss=OperationDb(

         host=‘211.149.147.233‘,user=‘byz‘,passwd=‘123456‘,db=‘byz‘,sql=‘insert into hn(id,name,sex)  VALUE(08,"houning","female") ;‘

)                     #外面用单引号,sql语句里面要用双引号;#调用这个函数,并传参,把这个函数的值赋给ss

print(ss)        #打印出ss,即函数体里的res

操作redis:

redis是一个nosql类型的数据库(安装Redis Desktop Manager ),里面存的是键值对,键值对数据都存在内存中,有很快的读写速度;python操作redis需要使用redis模块,pip安装即可。

#======下面是操作字符串类型的,key都是string类型

         import redis

    r = redis.Redis(host=‘127.0.0.1‘,port=6379,db=0,password=’123456’)    #指定连接redis的ip、端口号以及哪个数据库、密码

    r.set(‘name‘, ‘houning‘)    #设置key和value;name是字段,houning是值;如果name的值已存在,这样写就会把原来的值替换掉;

    r.setnx(‘name2‘, ‘value‘)    #设置的name的值,如果name不存在的时候才会设置

    r.setex(‘name3‘, ‘value‘, 30)   #设置的name的值,和失效时间,过了30秒后,name3这个key就会自动失效(因为数据都是存在内存当中的,要释放);比如登录一个网页,10分钟后,就需要重新登录,这里就用到了redis的失效时间

    r.mset(k1=‘v1‘,k2=‘v2‘)     #批量设置多个值,不能设置失效时间

n=r.get(‘name‘)     #获取name的值,redis里面获取到的都是bytes类型;

print(n.decode())    # redis里存进去的都是字符串,但获取出来的是bytes类型;decode方法是把bytes类型的结果转换成string类型的

print(json.loads(n.decode()))    #把字符串类型再转换成字典或list类型的

    print(r.mget(‘k1‘,‘k2‘))    #批量获取key

    r.delete(‘name‘)     #删除值

    r.delete(‘k1‘,‘k2‘)     #批量删除

         print(r.keys())        #获取所有的key

#======下面是操作哈希类型的key

         import redis

    r = redis.Redis(host=‘127.0.0.1‘,port=6379,db=0,password=’123456’)    #指定连接redis的ip、端口号以及哪个数据库、密码

    r.hset(‘hname‘, ‘hn‘, ‘123456‘)          #设置哈希类型hname的值,hname是外面的key,hn是里面的key,123456是里面key的值

    r.hset(‘hname‘, ‘zg‘, ‘456789‘)         #继续给hname设置哈希类型的值

    r.hsetnx(‘hname‘,‘key2‘,‘value23‘)            #为hname设置里面的key和value,hname这个key不存在的时候才会设置

    r.hmset(‘hname‘,{‘k1‘:‘v1‘,‘k2‘:‘v2‘})     #批量设置哈希类型hname的key和value

    r.hget(‘hname‘, ‘hn‘)     #获取hname里hn的值,取出来是123456

    print(r.hgetall(‘hname‘))    #获取hname里面所有的key和value,是一个字典

    r.hdel(‘hname‘,‘hn‘)      #删除哈希类型hname里,指定的hn值

    print(r.keys())         #获取所有的key

PS:

r.set(‘user:houning‘,‘123456‘)    #设置key时,如果带冒号,则会在redis上自动建一个user的文件夹,文件夹里存的key和value值为:user_houning,123456

r.hset(‘session:test‘,‘houning‘,‘123456‘)    #哈希类型的同上,会自动创建一个session的文件夹,外面的值为“test”,里面的key和value是:houning,123456

====== eg:写操作redis的函数

def  OperationRedis(host,passwd,k,v=False,port=6379,db=0):    #因为set值时,key和value都得填,所以把v设置成默认值参数

         r=redis.Redis(host=host,password=passwd,port=port,db=db)

         if v:                  #如果传了v的值,则设置key和value

                   r.set(k,v)

                   res=88

         else:                  #没有传v的值

                   res=r.get(k).encode()        #转换成字符串类型

         return  res

Python操作数据库(mysql redis)


推荐阅读
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • Squaretest:自动生成功能测试代码的高效插件
    本文将介绍一款名为Squaretest的高效插件,该工具能够自动生成功能测试代码。使用这款插件的主要原因是公司近期加强了代码质量的管控,对各项目进行了严格的单元测试评估。Squaretest不仅提高了测试代码的生成效率,还显著提升了代码的质量和可靠性。 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • 在Kohana 3框架中,实现最优的即时消息显示方法是许多开发者关注的问题。本文将探讨如何高效、优雅地展示flash消息,包括最佳实践和技术细节,以提升用户体验和代码可维护性。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 本文探讨了 Java 中 Pair 类的历史与现状。虽然 Java 标准库中没有内置的 Pair 类,但社区和第三方库提供了多种实现方式,如 Apache Commons 的 Pair 类和 JavaFX 的 javafx.util.Pair 类。这些实现为需要处理成对数据的开发者提供了便利。此外,文章还讨论了为何标准库未包含 Pair 类的原因,以及在现代 Java 开发中使用 Pair 类的最佳实践。 ... [详细]
  • 深入理解 Java 控制结构的全面指南 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 本文详细探讨了MySQL数据库实例化参数的优化方法及其在实例查询中的应用。通过具体的源代码示例,介绍了如何高效地配置和查询MySQL实例,为开发者提供了有价值的参考和实践指导。 ... [详细]
  • 在Android 4.4系统中,通过使用 `Intent` 对象并设置动作 `ACTION_GET_CONTENT` 或 `ACTION_OPEN_DOCUMENT`,可以从相册中选择图片并获取其路径。具体实现时,需要为 `Intent` 添加相应的类别,并处理返回的 Uri 以提取图片的文件路径。此方法适用于需要从用户相册中选择图片的应用场景,能够确保兼容性和用户体验。 ... [详细]
  • 在前文探讨了Spring如何为特定的bean选择合适的通知器后,本文将进一步深入分析Spring AOP框架中代理对象的生成机制。具体而言,我们将详细解析如何通过代理技术将通知器(Advisor)中包含的通知(Advice)应用到目标bean上,以实现切面编程的核心功能。 ... [详细]
  • 在IIS上运行的WebApi应用程序在开发环境中能够正常进行文件的读写操作。然而,在尝试通过FTP访问实时服务器上的文件列表时,遇到了无法显示的问题,尽管服务器配置与开发环境相同。这可能涉及权限设置、FTP服务配置或网络连接等方面的问题。 ... [详细]
  • Python 中 json.dumps() 和 json.loads() 的使用方法详解——Python 面试与 JavaScript 面试必备知识
    在 Python 中,`json.dumps()` 和 `json.loads()` 是处理 JSON 数据的核心函数。`json.dumps()` 用于将字典或其他可序列化对象转换为 JSON 格式的字符串,而 `json.loads()` 则用于将 JSON 字符串解析为 Python 对象。本文详细介绍了这两个函数的使用方法及其在 Python 和 JavaScript 面试中的重要性,帮助读者掌握这些关键技能。 ... [详细]
author-avatar
j7988l28
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有