失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > mysql导出数据表 .xls_mysql数据库导出xls-自定义

mysql导出数据表 .xls_mysql数据库导出xls-自定义

时间:2019-09-10 02:21:41

相关推荐

mysql导出数据表 .xls_mysql数据库导出xls-自定义

使用python编写脚本,一键式导出sql语句执行结果到xls表格中,每条语句结果一个标签页

v1,本地运行

文件列表:

bm.py 主程序

bm_sqlcon.py 数据库连接,查询模块

sql.py 初始化数据库查询语句

xls.py 写入xls文件模块

需要安装第三方模块

easy_install mysql-connector-python

pip install xlwt

实现了结果格式转换,时长计算使用百纳秒到小时:分:秒:帧。设置单元格日期格式,转换数字为汉字说明,设置列宽。

语句未做交互

def s_t(bnm):

bnm=int(bnm)

miao=bnm//10**7

#print(miao)

fen=miao//60

xs=miao//3600

dual=(bnm/10**7-miao)*25

dual=round(dual)

miao=miao%60

fen=fen%60

fh=str(xs)+':'+str(fen)+':'+str(miao)+':'+str(dual)

return fh

v2 版本可以考虑增加网页交互

学到的知识:

1、主函数逻辑:

==》获取查询sql语句,存入字典中。可以使用key为中文的字典,后期直接轮询取key赋值给标签

==》轮询语句字典,取出语句传递给sqlcon模块,执行查询,返回结果是一个包含元组的列表。元组是行信息

==》结果写入字典,进行数据预处理,具体处理调用不同函数,此时遇到一个问题是元组内容是不可变,的所以需要先转成列表,修改完后再转成元组。(如果就用列表应该也可以)

==》传给xls模块,设定单元格属性,加边框,设置列宽,显示方式,写入xls。

2、处理字典数据时,遇到变量类型问题,因为python3是隐式转换格式的,函数传递的数字型的字符串被识别成了数字,

在if语句中与字典中的数字型字符串进行比较判断时,无法通过。最后通过强制转换类型的方式解决。

stat_dict={'20':'编目中','40':'审核中','1000':'完成'}

for k in stat_dict:

#print(key,k,stat_dict[k])

if(k==str(key)):

return stat_dict[k]

包括上面的数字转换函数,也涉及到了类型转换,数字拼接字符串

3、处理字典数据时,因涉及到各种取值 ,各种运算。所以对字典值进行了赋值给另一个变量,

因为字典的值是列表这样的高级数据结构,在直接赋值时,采用的为浅copy方式,结果修改变量的值,原始字典竟然会变化。

如此,猜测浅copy的变量,可以向指针一样使用。

4、处理查询结果时,因为返回的只有结果,没有列名,需要手动增加列名。构造一个含有列名元组的列表,和数据列表进行+的拼接,非常方便。

列名的获取,本来是通过游标的cursor.description获取的,结果获取结果是元组,还有其他信息,这到还能处理,

但是查询语句中带有公式时count(*)这种,就很麻烦,取出的值不是字符串,而是字节码。经过折腾还是没有能统一处理,最后手动构建了列名列表实现

5、数据库操作,可以放到try: except:语句,进行错误处理。而且数据的连接信息,可以写到字典中,通过可变参数传递调用。

try:

conn = mysql.connector.connect(**config)

except mysql.connector.Error as e:

print('open database failed !{} '.format(e))

6、字典初始化时,可以在{中}每个键值对写一行,不需要特殊换行符\

7、分模块编程时,可以在模块中写入test()函数,写入调试数据,对模块进行调试,引入时,这些是不会执行的

8、可以在语句中加入print()函数,输出变量的值,来判断逻辑错误,测试好后可以#注释掉,更换测试条件可以再复制一份,尽量保留测试记录

其他知识:

打开文件时,可以是用with as 方式,进行错误判断

涉及文件操作open的都写入字符编码,防止中文乱码

如果觉得《mysql导出数据表 .xls_mysql数据库导出xls-自定义》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。