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]