需求:写一个函数,传入一个表名,把这个表里面的数据导出到excel中
def export_excel('students'):
pass
students.xls
import pymysql ,xlwt
name=input('输入你要传入的表名:').strip()
#连接数据库
connect = pymysql.connect(host='118.24.3.40',user='jxz',
password='123456',
port=3306,db='jxz',
autocommit=True,charset='utf8')
cur=connect.cursor(pymysql.cursors.DictCursor)#建立游标
tab_sql="SELECT table_name FROM information_schema.TABLES WHERE table_name ='%s';"%name
cur.execute(tab_sql)
if cur.fetchall():#判断有没有结果
quer_sql='select * from %s;'%name
cur.execute(quer_sql)#执行sql
data=cur.fetchall()#拿到表中的数据
#拿到表头两个方法一个是du,另一种在游标改变成字典取key
if data:
book=xlwt.Workbook()#没有处理表头
sheet=book.add_sheet('sheet')
for index,key in enumerate(data[0]):#表头写到数据库里去
sheet.write(0,index,key)
for row,item in enumerate(data,1):#行的逻辑从第一行开始写 内容写进数据库
for col,value in enumerate(item.values()):#列的逻辑
sheet.write(row,col,value)
book.save(name+'.xls')
print('导出完成')
else:
print('表中无数据,无法导出')
else:
print('表不存在')
思维导图这样这样分析
封装数据库和写extel的方法文件并且起名字为tools,记住导入tools文件要先将这个文件的为文件夹手动变成环境变量
import pymysql,traceback,xlwt
#封装连接数据库和写进extel的操作
MYSQL_INFO={
'host' :'118.24.3.40',
'user' : 'jxz',
'password' :'123456', # 字符串
'db':'jxz',
'port':3306, # int类型}
'host':'118.24.3.40',
'user':'jxz',
'password':'123456', # 字符串
'db':'jxz',
'port':3306} # int类型
def execute_sql(sql):
coon = pymysql.connect(**MYSQL_INFO)
cur = coon.cursor(pymysql.cursors.DictCursor) # 建立游标,仓库管理员
try:
cur.execute(sql)#执行sql语句
except:
print('sql语句不正确')
traceback.print_exc()#打印报错信息强制打印
else:#正确了执行这条
return cur.fetchall()
finally:#走不走都执行这个命令
coon.close()
cur.close()
def write(name,data):
book = xlwt.Workbook() # 没有处理表头
sheet = book.add_sheet('sheet1')
for index, key in enumerate(data[0]):#写表头
sheet.write(0, index, key)
for row, item in enumerate(data, 1): # 行的逻辑从第一行开始写
for col, value in enumerate(item.values()): # 列的逻辑
sheet.write(row, col, value)
book.save(name + '.xls')
# print('导出完成')
写一个总函数的入口去调用
#发邮件
#mysql
#异常处理
#操作extel
import pymysql ,xlwt,tools
def main():
table_name=input('输入你要传入的表名:').strip()
table_exist_sql="SELECT table_name FROM information_schema.TABLES WHERE table_name ='%s';"%table_name
if tools.execute_sql(table_exist_sql):
query_sql = 'select * from %s;'%table_name
data=tools.execute_sql(query_sql)
if data:
tools.write(table_name,data)
print('导出完成')
else:
print('表里没有数据')
else:
print('表不存在')
main()
为什么要这样写的,为了是节省代码,操作方便,这种写代码的方式,工作中会经常用到