当前位置: 首页 > news >正文

python学习笔记(九):操作数据库

我们在写代码的时候,经常会操作数据库,增删改查,数据库有很多类型,关系型数据库和非关系数据库,这里咱们介绍一下python怎么操作mysql、redis和mongodb。

一、python操作mysql数据库 python3中操作mysql数据需要安装一个第三方模块,pymysql,使用pip install pymysql安装即可,在python2中是MySQLdb模块,在python3中没有MySQLdb模块了,所以使用pymysql。

    import pymysql
    # 创建连接,指定数据库的ip地址,账号、密码、端口号、要操作的数据库、字符集
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='data',charset='utf8')
    # 创建游标
    cursor = conn.cursor()
    # 执行SQL,并返回收影响行数
    effect_row = cursor.execute("update students set name = 'niuhy' where id = 1;")
    # 执行SQL,并返回受影响行数
    #effect_row = cursor.execute("update students set name = 'niuhy' where id = %s;", (1,))
    # 执行SQL,并返回受影响行数
    effect_row = cursor.executemany("insert into students (name,age) values (%s,%s); ", [("andashu",18),("12345",20)])
    #执行select语句
    cursor.execute("select * from students;")
    #获取查询结果的第一条数据,返回的是一个元组
    row_1 = cursor.fetchone()
    # 获取前n行数据
    row_2 = cursor.fetchmany(3)
    # 获取所有数据
    row_3 = cursor.fetchall()
    # 提交,不然无法保存新建或者修改的数据
    conn.commit()
    # 获取最新自增ID
    new_id = cursor.lastrowid    
    print(new_id)
    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()
    上面的操作,获取到的返回结果都是元组,如果想获取到的结果是一个字典类型的话,可以使用下面这样的操作
 
    import pymysql
    # 创建连接,指定数据库的ip地址,账号、密码、端口号、要操作的数据库、字符集
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='data',charset='utf8')
    # 创建游标
    cursor = conn.cursor()
    
    cursor = coon.cursor(cursor=pymysql.cursors.DictCursor)#需要指定游标的类型,字典类型
    # 执行SQL
    cursor.execute("select * from user;")
    #获取返回结果,这个时候返回结果是一个字典
    res = cursor.fetchone()#返回一条数据,如果结果是多条的话
    print(res)
    res2 = cursor.fetchall()#所有的数据一起返回

二、操作redis redis是一个nosql类型的数据库,数据都存在内存中,有很快的读写速度,python操作redis使用redis模块,pip安装即可

    import redis
    r = redis.Redis(host='127.0.0.1',port=6379,db=0)#指定连接redis的端口和ip以及哪个数据库
    r.set('name', 'value')#set string类型的值
    r.setnx('name2', 'value')#设置的name的值,如果name不存在的时候才会设置
    r.setex('name3', 'value', 3)#设置的name的值,和超时时间,过了时间key就会自动失效
    r.mset(k1='v1',k2='v2')#批量设置值
    r.get('name')#获取值
    print(r.mget('k1','k2'))#批量获取key
    
    r.delete('name')#删除值
    r.delete('k1','k2')#批量删除
    #======下面是操作哈希类型的
    r.hset('hname', 'key', 'value')#set 哈希类型的值
    r.hset('hname', 'key1', 'value2')#set 哈希类型的值
    r.hsetnx('hname','key2','value23')#给name为hname设置key和value,和上面的不同的是key不存在的时候
    #才会set
    r.hmset('hname',{'k1':'v1','k2':'v2'})#批量设置哈希类型的key和value
    r.hget('name', 'key')#获取哈希类型的值
    print(r.hgetall('hname'))#获取这个name里所有的key和value
    r.hdel('hname','key')#删除哈希类型的name里面指定的值
    print(r.keys())#获取所有的key

 

转载于:https://www.cnblogs.com/hanzhao1987/p/8215509.html

相关文章:

  • Java今年最流行的三大框架你应该学习了
  • JSON数组,JSON对象,数组的区别与基本操作整理
  • 阿里云全球19个地域节点,哪个节点的服务器好,速度快?
  • 回顾2017:基础设施支出增长 思科占主导地位
  • 微服务入门【系列视频课程】
  • mongodb集群模式(主从模式,副本集模式,分片模式)
  • 透彻影像王书浩:三易其辙与功不唐捐
  • 如何使用 Spinnaker 和 Kubernetes 进行数据库变更发布
  • 为什么需要模版成员方法
  • W3C官方推荐使用新发布的HTML5.2
  • Lintcode: Minimum Subarray 解题报告
  • laravel ORM get() first()
  • h5 扫描二维码打开app和点击下载功能的实现
  • 云时代重新定义主机安全:自动化安全闭环是核心
  • C#利用HttpWebRequest进行post请求的示例(HTTPS)
  • .pyc 想到的一些问题
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • Apache的80端口被占用以及访问时报错403
  • Gradle 5.0 正式版发布
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java IO学习笔记一
  • Java多态
  • Spring框架之我见(三)——IOC、AOP
  • Sublime Text 2/3 绑定Eclipse快捷键
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 阿里云Kubernetes容器服务上体验Knative
  • 第2章 网络文档
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 码农张的Bug人生 - 见面之礼
  • 区块链共识机制优缺点对比都是什么
  • 责任链模式的两种实现
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • Android开发者必备:推荐一款助力开发的开源APP
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​第20课 在Android Native开发中加入新的C++类
  • # Java NIO(一)FileChannel
  • (2)Java 简介
  • (Git) gitignore基础使用
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (六)c52学习之旅-独立按键
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一一四)第九章编程练习
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .libPaths()设置包加载目录
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET 使用 XPath 来读写 XML 文件
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .net实现客户区延伸至至非客户区