0
点赞
收藏
分享

微信扫一扫

Python实战:从数据库到Excel的复杂查询结果处理【中】

一、前言

在上篇中,我已经成功从数据库查询到数据,并根据指定条件将数据写入到excel中,但是写入的数据和我们通过数据库连接工具查询到的结果并不一致,接下来我们就来解决:Python从数据库查询的数据保存到excel中后,数据格式异常的问题

二、解决步骤

分析现象

使用Navicat从数据库查询到的数据是这样的:

Python实战:从数据库到Excel的复杂查询结果处理【中】_数据库查询

Python从数据库查询到的数据是这样的:

Python实战:从数据库到Excel的复杂查询结果处理【中】_Python_02

将Python从数据库查询到的结果保存到excel中是这样的:

Python实战:从数据库到Excel的复杂查询结果处理【中】_数据库查询_03

对比后发现,Python从数据库查询的数据保存到excel中:

1.数字较长时展示异常(a_id、m_id)--Mysql中为bigint,excel中丢失精度

2.1展示为b'\x01'(s)--Mysql中为bit,Python中展示异常

3.时间展示为数字--Mysql中为datetime,Excel中展示异常

可想而知,根本原因在于MySQL中的数据类型和Python中的数据类型不匹配

解决问题

既然数据类型不一致,在写入Excel之前,就需要先将数据格式进行处理

这里只判断了数据是否为byte类型和日期类型:

def is_date(val):
    """
    判断date_str是否为日期格式
    """
    date_format = "%Y-%m-%d"
    try:
        if isinstance(val, str):
            new_str = val[:10]
            valid_date = time.strptime(new_str, date_format)
            return True
        else:
            return False
    except ValueError or TypeError as e:
        return False


def convert_value(val):
    """转换数据格式为excel"""
    if isinstance(val, bytes):
        val = ord(val)
    if is_date(val):
        val = datetime.datetime.strptime(val, "%Y-%m-%d %H:%M:%S.%f")
    new_val = str(val)
    return new_val

在写入excel前调用convert_value(val)方法即可

for idx, val in enumerate(results2):
    for i, v in enumerate(val):
        new_val = convert_value(val[v])
        sheet.write(idx + 1, i, new_val)

展示效果

运行效果如下图所示:

Python实战:从数据库到Excel的复杂查询结果处理【中】_数据库查询_04

三、总结

1.分析了保存到excel数据格式异常的原因

2.先判断读取的数据类型是否为byte或者datetime类型

3.将数据类型处理为字符串,写入到excel中


举报

相关推荐

0 条评论