• 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的都写入字符编码,防止中文乱码


  • 相关阅读:
    【docker】命令学习
    docker 安装mysql
    Docker DockerFile案例 自定义的tomcat9
    尚硅谷 Docker DockerFile案例 ONBUILD命令案例
    dockerfile 案例2 CMD ENTRYPOINT命令案例
    Dockerfile案例
    Dockerfile解析
    数据卷容器
    Dockfile添加数据卷
    容器数据卷
  • 原文地址:https://www.cnblogs.com/mathprice/p/9155054.html
Copyright © 2020-2023  润新知