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

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

时间:2023-12-27 19:31:52浏览次数:37  
标签:val Python Excel 数据库 excel date new

一、前言

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

二、解决步骤

分析现象

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

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

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

Python实战:从数据库到Excel的复杂查询结果处理【中】_数据_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的复杂查询结果处理【中】_Python_04

三、总结

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

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

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


标签:val,Python,Excel,数据库,excel,date,new
From: https://blog.51cto.com/u_16379005/9003457

相关文章

  • openGauss学习笔记-175 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作
    openGauss学习笔记-175openGauss数据库运维-备份与恢复-导入数据-管理并发写入操作示例本章节以表test为例,分别介绍相同表的INSERT和DELETE并发,相同表的并发INSERT,相同表的并发UPDATE,以及数据导入和查询的并发的执行详情。CREATETABLEtest(idint,namechar(50),addressva......
  • python 使用 rsa库进行RSA签名和加解密
     python使用rsa库进行RSA签名和加解密 #-*-coding:UTF-8-*-#!/usr/bin/envpythonimportbase64importrsafromrsaimportcommon#使用rsa库进行RSA签名和加解密classRsaUtil(object):PUBLIC_KEY_PATH='/tmp/gbzj/public_key.pem'#公钥P......
  • 【Python数据分析课程设计】大数据分析—利用k-means 聚类分析对客户细分分析
    一、选题的背景在当今社会,大数据已经成为了企业决策的重要依据。通过对客户进行细分分析,企业可以更好地了解客户的需求和行为,从而制定更加精准的营销策略,提高市场竞争力。要达到的数据分析目标是通过对客户数据的分析,找出不同客户群体的特征和需求,为企业提供有针对性的营销......
  • openGauss学习笔记-174 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作
    openGauss学习笔记-174openGauss数据库运维-备份与恢复-导入数据-管理并发写入操作174.1事务隔离说明openGauss基于MVCC(多版本并发控制)并结合两阶段锁的方式进行事务管理,其特点是读写之间不阻塞。SELECT是纯读操作,UPDATE和DELETE是读写操作。读写操作和纯读操作之间并不会发......
  • python生成word文档
    python生成word文档,感觉比java生成方便很多下面看看步骤1、环境pipinstallpython-docx2、准备一张需要插入word中的图片monty-truth.png3、一段代码fromdocximportDocumentfromdocx.sharedimportInchesdocument=Document()document.add_heading('Document......
  • 关系数据库、非关系数据库
    非关系型数据库:......
  • 「悦数图数据库」获 2023 年度 IT168 创新解决方案奖
    近日,由国内知名 IT 垂直门户媒体 IT168 举办的 2023 年度技术卓越奖评选结果正式公布,悦数图数据库荣获人工智能领域创新解决方案奖,充分肯定了悦数在大语言模型和图数据库领域的技术能力和行业前瞻性。图技术结合大模型技术,未来新方向RAG,即Retrieval-AugmentedGeneration,是......
  • SQL SERVER 数据库的常用DBA命令
    查看表是否死锁select* frommaster..SysProcesses wheredb_Name(dbID)='数据库名'  andspId<>@@SpId  anddbID<>0  andblocked>0;或者selectrequest_session_idspid,OBJECT_NAME(resource_associated_entity_id)table......
  • python实现汉诺塔游戏
    highlighter-pythonlt=list()#左边的空列表rt=list()#右边的空列表ct=list()#中间的空列表#初始化函数definit():size=int(input("请输入你要挑战的高度:"))#建立左边的汉诺塔foriinrange(1,size+1):lt.append(i*2-1);......
  • SqlServer数据库
    使用VisualStudio进行winform项目与数据库交互时主要分为如下几步:1.编写JDBC代码2.调用方法进行增删改查操作2.1增2.2删2.3改2.4查我们需先创建好目标数据库,记录下本机SQLServer服务器名称,我的是"PC-20221027HHVU"(直接去SQLServer里看就行) 这里以图......