• Python学习Python操作数据库


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

    一、python操作mysql数据库 

    python3中操作mysql数据需要安装一个第三方模块,pymysql,使用pip install pymysql安装即可。在python2中是MySQLdb模块,在python3中没有MySQLdb模块了,所以使用pymysql。mysql为传统的关系型数据库,关系型数据库有以下特点:

    1、数据存在磁盘上
    2、使用sql语句来操作数据
    3、表与表之间有关系

    使用python操作mysql大致有以下几步:

    1、连上数据库:ip、账号密码、端口号、数据库

    2、建立游标

    3、执行sql

    4、获取结果

    5、关闭游标、关闭连接

    import pymysql
    
    # 创建连接,指定数据库的ip地址,账号、密码、端口号、要操作的数据库、字符集
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='data', charset='utf8')
    cur = conn.cursor()# 创建游标
    sql = "update students set name = 'niuhy' where id = 1;"
    effect_row = cur.execute(sql)  # 执行SQL,并返回受影响行数
    
    # executemany 批量插入数据
    sql = "insert into students (name,age) values (%s,%s);"
    args = [("andashu", 18), ("12345", 20)] # 包含多个元组的列表,每个元组对应mysql当中的一条数据
    cur.executemany(sql,args) #批量插入数据
    # effect_row = cur.executemany("insert into students (name,age) values (%s,%s); ", [("andashu", 18), ("12345", 20)])
    conn.commit() # 提交,不然无法保存新建或者修改的数据
    
    cur.execute("select * from students;") # 执行select语句
    row_1 = cur.fetchone() # 获取查询结果的第一条数据,返回的是一个元组
    row_2 = cur.fetchmany(3)# 获取前n行数据
    row_3 = cur.fetchall()# 获取所有数据
    
    new_id = cur.lastrowid # 获取最新自增ID
    cur.close()# 关闭游标
    conn.close()# 关闭连接

    上面的操作,获取到的返回结果都是元组,如果想获取到的结果是一个字典类型的话,可以使用下面这样的操作:

    import pymysql
    
    # 创建连接,autocommit=Ture表示自动提交,在新增修改数据时会自动提交
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='data', charset='utf8',autocommit=True)
    cursor = conn.cursor() # 创建游标
    cursor = coon.cursor(cursor=pymysql.cursors.DictCursor)  # 需要指定游标的类型,字典类型
    cursor.execute("select * from user;")# 执行SQL
    
    # 获取返回结果,这个时候返回结果是一个字典
    res = cursor.fetchone()  # 返回一条数据,如果结果是多条的话
    print(res)
    res2 = cursor.fetchall()  # 所有的数据一起返回

    二、python操作redis

     redis是一个非关系型(nosql)的数据库,数据都存在内存中,有很快的读写速度,python操作redis使用redis模块,pip安装即可:pip install redis

     redis是一个key-value存储系统

    import redis
    r = redis.Redis(host='127.0.0.1',port=6379,password='123456',db=10)
    #连接redis
    #增删改查
    
    #操作string类型
    r.set('nhy_info','age 18 sex nan sdfsdfsdfsd') #增加、修改数据,如果设置正确则返回true
    res = r.get('nhy_info')  #获取数据,二进制
    print( res.decode() ) #编码,就变成了字符串
    r.delete('nhy_info') #指定一个key删除他,key不存在的话会被忽略
    #其他的方法
    #exists     判断key是否存在,存在返回true,不存在返回false
    #expiere     命令用于设置 key 的过期时间。key 过期后将不再可用
    #ttl         查看键的失效时间还剩多少
    #type        用于返回所储存的值的类型
    
    r.flushdb()#可以清空当前数据库里面所有的key
    print(r.keys('*info')) #获取到所有符合的key
    print(r.type('session_crm'))#看key的类型
    
    print(r.exists('dashu_name')) #判断这个key是否存在
    r.expire('nhy_info',50)#指定key的失效时间,失效时间为600s。时间未失效时能查到key的值,否则为none
    print(r.ttl('nhy_info'))#用来这个key的失效时间

    操作hash类型的key:

    #hash 哈希类的key
    #哈希类型理解为一个字典嵌套字典
    # select 10 redis的命令行里面select 8 就是切换数据库
    
    #增删改查
    #增加、修改
    r.hset('session_crm','liuxinyu','sdfjksdklfjssdf') #增加,修改
    r.hset('session_crm','zhouyifan_','ssdfsdfjksdklfjssdf') #
    r.hset('session_crm','laowang___','ssdfsdfjksdklfjssdf') #
    
    #删除
    r.hdel('session_crm','liuxinyu') #删除指定的小key
    r.delete('session_crm') #直接删除大key
    
    #查询
    print(r.hget('session_crm','zhouyifan_'))#获取指定小key里面的数据
    res = r.hgetall('session_crm')#获取到hash类型里面所有的数据
    #查询
    # print(r.hget('session_crm','zhouyifan_'))#获取指定小key里面的数据
    res = r.hgetall('session_crm')#获取到hash类型里面所有的数据
    print(res)
    
    #处理返回的结果
    a = {}
    for k,v in res.items():
        a[k.decode()] = v.decode()
    print(a)
    
    #{ b'k':b'v',b'k2':b'v2'}
    for k,v in res.items():
        res[k.decode()] = res.pop(k).decode()  #能节省内存,因为他把原来的key删掉了
    print(res)

    三、python操作mongodb

    redis是一个非关系型(nosql)的数据库,数据都存在磁盘上的,python操作mongodb使用pymongo模块,pip安装即可:pip install pymongo

    import pymongo
    client = pymongo.MongoClient(host='118.24.3.40',port=27017) #连接mongodb
    db = client['szp']#选择数据库,如果这个数据库不存的话,会帮你创建
    # db = client.spz
    collection = db['stu_info']#选择一个集合,就相当于mysql里面表
    # collection = db.stu_info
    
    #插入
    collection.insert({'name':'Tom','age':18,'sex':'','hobbies':['吃饭','睡觉','打豆豆']}) #插入数据
    lucy = {'name':'Lucy','age':'20','sex':'','hobbies':['音乐','电影','吉他']}
    collection.insert(lucy)
    
    # #更新
    collection.update({'name':'Lucy'},{'$set':{'age':'18'}})
    
    #查询
    # 查询所有的结果
    for i in collection.find():
        print(i)
    
    # 查询name为lucy的
    for d in collection.find({'name':'Lucy'}):
        print(d)
    
    #删除
    collection.delete_one({'name':'Lucy'})#如果有多条的话,只会帮你删掉1条
    collection.delete_many({'name':'Tom'})#会删除多条
    
    
  • 相关阅读:
    spring19
    springmvc19
    Android打开数据库读取数据
    家庭记账本开发第二天
    家庭记账本开发第一天
    体温填报小程序完结
    一个抽取百度定位的教程(下载百度地图Demo+配置+抽取)
    将百度地图Demo抽取出来安到自己的程序中
    Android定位
    体温数据上传程序开发+获取时间的三种方法+DB Browser下载及安装
  • 原文地址:https://www.cnblogs.com/ddxxn/p/9636517.html
Copyright © 2020-2023  润新知