• python学习笔记(十)完善数据库操作


    1.cur = coon.cursor(cursor=pymysql.cursors.DictCursor)的用法

       建立游标,指定cursor类型返回的是字典,如果不指定类型,返回的是元组类型数据

    import flask,pymysql,hashlib,json,redis
    def mydb(sql,port=3306,charset='utf8'):
        host,user,passwd,db='118.24.3.40','jxz','123456','jxz'
        coon = pymysql.connect(user=user,host=host,port=port,passwd=passwd,db=db,charset=charset)
        cur = coon.cursor(cursor=pymysql.cursors.DictCursor)#建立游标,指定cursor类型返回的是字典
        cur.execute(sql)
        if sql.strip()[:6].upper()=='SELECT':
            res = cur.fetchall()
        else:
            coon.commit()
            res='ok'
        cur.close()
        coon.close()
        return res
    
    print(mydb('select * from users_info' ))
    指定游标的输出类型为字典,输出如下:
    [{'passwd': '123456', 'username': 'zhaoxian', 'id': '1'}, {'passwd': 'e10adc3949ba59abbe56e057f20f883e', 'username': 'xiaohei', 'id': '2'}, {'passwd': 'ab56b4d92b40713acc5af89985d4b786', 'username': 'lily', 'id': '3'}]
    未指定游标输出类型,输出如下:
    (('1', 'zhaoxian', '123456'), ('2', 'xiaohei', 'e10adc3949ba59abbe56e057f20f883e'), ('3', 'lily', 'ab56b4d92b40713acc5af89985d4b786'))

    2.cur.fetchone()与cur.fetchall(),cur.fetchmany()的区别

    cur.fetchone()
    #获取到这个sql执行的一条结果,它返回就只是一条数据
    cur.fetchall()
    #获取到这个sql执行的全部结果,它把数据库表里面的每一行数据放到一个list里面
    cur.fetchmany(5)
    #能传入一个数,指定返回多少条数据,如上就是指定返回5条数据

    如果sql语句执行的结果是多条数据的时候,那就用fetchall()
    如果你能确定sql执行的结果就只有一条,那么就用fetchone()

    3.cur.description可以动态获取到数据库中表的字段

    import flask,pymysql,hashlib,json,redis
    def mydb(sql,port=3306,charset='utf8'):
        host,user,passwd,db='118.24.3.40','jxz','123456','jxz'
        coon = pymysql.connect(user=user,host=host,port=port,passwd=passwd,db=db,charset=charset)
        cur = coon.cursor()#建立游标,指定cursor类型返回的是字典
        cur.execute(sql)
        if sql.strip()[:6].upper()=='SELECT':
            fields = []
            #print(cur.description)输出为:(('id', 253, None, 40, 40, 0, True), ('username', 253, None, 40, 40, 0, True), ('passwd', 253, None, 40, 40, 0, True))
            for field in cur.description:  #循环cur.descriptin中的元素
                fields.append(field[0])   #取cur.descriptin中的每个元素是一个元组,然后取第一个元素添加到fields列表中
            print(fields)
        else:
            coon.commit()
        cur.close()
        coon.close()
    
    mydb('select * from users_info' )
    fields = []
    for field in cur.description:  #循环cur.descriptin中的元素
         fields.append(field[0])
    
    这三行代码可以用列表生成式代替,使代码更简洁更有逼格,作用效果是完全一样的
    fields = [field[0] for field in fields]
  • 相关阅读:
    Java 异步编程
    对@repository,@Service, @Compent,@Controller注解的理解
    分布式锁的解决方案
    JVM垃圾收集器
    java死锁
    CountDownLatch和CylicBarrier以及Semaphare你使用过吗
    必懂知识——HashMap的实现原理
    重写equals为啥需要重写hashCode
    mysql数据库的索引
    mysql常见的优化策略
  • 原文地址:https://www.cnblogs.com/mululu/p/9014186.html
Copyright © 2020-2023  润新知