python进阶4-操作数据库

我们在写代码的时候,经常会操作数据库,增删改查,数据库有很多类型,关系型数据库和非关系数据库,这里咱们介绍一下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()
    上面的操作,获取到的返回结果都是元组,如果想获取到的结果是一个字典类型的话,可以使用下面这样的操作
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> pymysql
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 创建连接,指定数据库的ip地址,账号、密码、端口号、要操作的数据库、字符集</span>
conn = pymysql.connect(host=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">127.0.0.1</span><span style="color: rgba(128, 0, 0, 1)">'</span>, port=3306, user=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">root</span><span style="color: rgba(128, 0, 0, 1)">'</span>, passwd=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">123456</span><span style="color: rgba(128, 0, 0, 1)">'</span>, db=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">data</span><span style="color: rgba(128, 0, 0, 1)">'</span>,charset=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">utf8</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 创建游标</span>
cursor =<span style="color: rgba(0, 0, 0, 1)"> conn.cursor()

cursor </span>= coon.cursor(cursor=pymysql.cursors.DictCursor)<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">需要指定游标的类型,字典类型</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 执行SQL</span>
cursor.execute(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">select * from user;</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">获取返回结果,这个时候返回结果是一个字典</span>
res = cursor.fetchone()<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">返回一条数据,如果结果是多条的话</span>
<span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(res)
res2 </span>= cursor.fetchall()<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">所有的数据一起返回</span></span></pre>
复制代码
复制代码

二、操作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
复制代码
复制代码

 redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。

复制代码
复制代码
    import redis  
pool </span>= redis.ConnectionPool(host=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">127.0.0.1</span><span style="color: rgba(128, 0, 0, 1)">'</span>, port=9212<span style="color: rgba(0, 0, 0, 1)">)  
r </span>= redis.Redis(connection_pool=<span style="color: rgba(0, 0, 0, 1)">pool)  
r.set(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">one</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">first</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)  
r.set(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">two</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">second</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)  
</span><span style="color: rgba(0, 0, 255, 1)">print</span> r.get(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">one</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)  
</span><span style="color: rgba(0, 0, 255, 1)">print</span> r.get(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">two</span><span style="color: rgba(128, 0, 0, 1)">'</span>)  </pre>
复制代码
复制代码

转载自https://www.cnblogs.com/feng0815/p/7818852.html

posted @   R-Bear  阅读(167)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示