python学习笔记-day7-1-【python操作数据库】

上次说到了Python操作数据库,这里继续补充python操作数据库,如何获取数据表里的所有字段值以及将数据导出来到excel里,作为excel表表头。

一、上次说到封装一下mysql的操作

1、装一下函数执行数据库操作
#封装一下函数执行数据库操作
def my_db(host,user, passwd, db,sql, port=3306, charset='utf8'):
import pymysql
conn = pymysql.connect(user=user,host=host,port=port,passwd=passwd,db=db,charset=charset)
cur = conn.cursor() #建立游标
cur.execute(sql) #执行mysql
# res =cur.execute('select * from nhy WHERE username="xxx" and passwd="12345"')
username = 'xxxxxx'
passwd = '123456'
sql = 'select * from table_name where name="%s" and passwd="%s"' % (username, passwd)
res = cur.execute(sql)
if sql.strip()[:6].upper() == 'SELECT':
res = cur.fetchall() #res返回的是一个list
if res:
print('用户已经存在.')
else:
print('用户不存在')
else:
conn.commit()
res = 'ok'
cur.close()
conn.close()
return res

这里的res = cur.fetchall() #res返回的是一个list
如果需要获取结果集,则需要遍历整个二维数组。

二、可以指定返回的结果类型,则需要在建立游标时,指定为dict类型的,如下:
cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #建立游标的时候,指定了游标类型 ,返回就是一个字典了

1、具体用法

import pymysql
def my_db(sql, port=3306, charset='utf8'):
import pymysql
host, user, passwd, db = '127.0.0.1','xxx','xxxxx','xxxx'

conn = pymysql.connect(user=user,host=host,port=port,passwd=passwd,db=db,charset=charset)
cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #建立游标的时候,指定了游标类型 ,返回就是一个字典了
cur.execute(sql) #执行mysql
if sql.strip()[:6].upper() == 'SELECT':
res = ''
res = cur.fetchall() #res返回的是一个list
print(res)
# res = cur.fetchone()
# print(cur.fetchone())
# print(cur.fetchone())
# cur.fetchmany() #能传入一个数,返回多少条数据

# fetchall() #获取到这个sql执行的全部结果,它把数据库里的每一行数据放到一个List里面
# [['1','2','3']] [{} {} {}]
#fetchone() #获取到这个sql执行的一条结果,它返回就只是一条数据
#如果sql语句执行的结果是多条数据的时候,那就用fetchall()
#如果能确定sql执行的结果是只有一条数据的时候,那就和fetchone()

# print(cur.description)# 获取到的是数据表的字段描述
#(('id', 3, None, 11, 11, 0, True), ('name', 253, None, 20, 20, 0, True), ('sex', 253, None, 20, 20, 0, True))
#取表头
# fileds = []
# for filed in cur.description:
# fileds.append(filed[0])
fileds = [ filed[0] for filed in cur.description ] #列表生成式,与上面的结果一样
print(fileds)
# return fileds
return res

else:
conn.commit()
res = 'ok'
cur.close()
conn.close()
return res

sql= 'select * from stu limit 10;'
res = my_db(sql)
print(res)

结果如下:
  res = cur.fetchall() #res返回的是一个list
print(res)

[{'id': 1, 'name': '娜娜', 'sex': '女'}, {'id': 1, 'name': '娜娜', 'sex': '女'}]

fileds = [ filed[0] for filed in cur.description ] #列表生成式,与上面的结果一样
print(fileds)
结果如下:
['id', 'name', 'sex']

2、查看具本体的帮助方法

print(
dir(pymysql.cursors) #这个可以打印出来ymysql.cursors都有哪些方法
)

结果:
['Cursor', 'DictCursor', 'DictCursorMixin', 'PY2', 'RE_INSERT_VALUES', 'SSCursor', 'SSDictCursor', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'absolute_import', 'err', 'partial', 'print_function', 'range_type', 're', 'text_type', 'warnings']


猜你喜欢

转载自www.cnblogs.com/shmily2018/p/9005931.html