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]
原文地址:https://www.cnblogs.com/mululu/p/9014186.html