Python使用MySQL查询数据导出Excel-程序员宅基地

技术标签: python  mysql  数据库  Python编程  

Python系列之MySQL查询数据导出Excel

最近接到需求,需要通过一条SQL查询出来的id,去过滤另外一条SQL的数据,听起来并不难,但是因为业务原因需要查询很多个环境,而且需要经常查询,所以想到通过python程序来实现,先查出一个SQL数据,然后通过id拼装in查询出数据。

开发环境

  • MySQL 10.1.38-MariaDB-1~bionic
  • Python3.7.8

开发工具

  • PyCharm2018.1
  • SmartGit18.1
  • Navicat15.0.28

先引入一些依赖,主要有pandaspymysql

  • Pandas 是基于 BSD 许可的开源支持库,为 Python 提供了高性能、易使用的数据结构与数据分析工具。
  • Pymysql:PyMySQL是从Python连接到MySQL数据库服务器的接口。 它实现了Python数据库API v2.0,并包含一个纯Python的MySQL客户端库
import pandas as pd
import warnings

import pymysql

先进行数据库配置,需要引入pymysql,封装一个连接数据库的函数



# 数据库配置
MYSQL_HOST_ITEM = '127.0.0.1'
MYSQL_PORT_ITEM = 3306
MYSQL_USER_ITEM = 'root'
MYSQL_PASSWORD_ITEM = '11'
MYSQL_DATABASE_ITEM = 'test'
MYSQL_CHARSET_ITEM = 'utf8'

# 定义连接mysql函数
def connetmysql(host, port, user, password, database, sql, charset='utf8'):
    conn = pymysql.connect(host=host,
                           port=port,
                           user=user,
                           password=password,
                           database=database,
                           charset=charset)
    cursor = conn.cursor()
    sql = """%s""" % sql
    # 遇到时间格式自动解析
    df_mysql = pd.read_sql(sql, conn, parse_dates=True)
    df_mysql.columns = [x.lower() for x in df_mysql.columns]
    cursor.close()
    return df_mysql


先查询出ids


def readPlatformDept():
    sql_script = '''
      SELECT id from t1
    '''
    sql_data = connetmysql(host=MYSQL_HOST_PLATFORM, port=MYSQL_PORT_PLATFORM,
                                            user=MYSQL_USER_PLATFORM,
                                            password=MYSQL_PASSWORD_PLATFORM, sql=sql_script,
                                            database=MYSQL_DATABASE_PLATFORM)
    return sql_data


通过ids 使用in查询

def readItemDeptNum(codes):
    sql_script = '''SELECT
      *
    FROM
        t2
        code in ({codes})
        '''.format(codes=', '.join("'" + item + "'" for item in codes))
    # sql_script = sql_script % ','.join(['%s']*len(tongyicodes))
    sql_data = connetmysql(host=MYSQL_HOST_ITEM, port=MYSQL_PORT_ITEM,
                           user=MYSQL_USER_ITEM,
                           password=MYSQL_PASSWORD_ITEM, sql=sql_script,
                           database=MYSQL_DATABASE_ITEM)

    return sql_data

main函数进行调用

if __name__ == "__main__":
    platform_data = readPlatformDept()
    item_data = readItemDepNum(platform_data['id'])
    # 导出Excel
    item_data.to_excel('item_query_excel.xlsx')
import pandas as pd
import warnings

import pymysql

warnings.filterwarnings("ignore")

# Platform配置
MYSQL_HOST_PLATFORM = '127.0.0.1'
MYSQL_PORT_PLATFORM = 3306
MYSQL_USER_PLATFORM = 'root'
MYSQL_PASSWORD_PLATFORM = '111'
MYSQL_DATABASE_PLATFORM = 'test'
MYSQL_CHARSET_PLATFORM = 'utf8'
# ITEM配置
MYSQL_HOST_ITEM = '127.0.0.1'
MYSQL_PORT_ITEM = 33306
MYSQL_USER_ITEM = 'root'
MYSQL_PASSWORD_ITEM = '111'
MYSQL_DATABASE_ITEM = 'item'
MYSQL_CHARSET_ITEM = 'utf8'

# 定义连接mysql函数
def connetmysql(host, port, user, password, database, sql, charset='utf8'):
    conn = pymysql.connect(host=host,
                           port=port,
                           user=user,
                           password=password,
                           database=database,
                           charset=charset)
    cursor = conn.cursor()
    sql = """%s""" % sql
    # 遇到时间格式自动解析
    df_mysql = pd.read_sql(sql, conn, parse_dates=True)
    df_mysql.columns = [x.lower() for x in df_mysql.columns]
    cursor.close()
    return df_mysql


def readPlatformDept():
    sql_script = '''
      SELECT id from t1
    '''
    sql_data = connetmysql(host=MYSQL_HOST_PLATFORM, port=MYSQL_PORT_PLATFORM,
                                            user=MYSQL_USER_PLATFORM,
                                            password=MYSQL_PASSWORD_PLATFORM, sql=sql_script,
                                            database=MYSQL_DATABASE_PLATFORM)
    return sql_data

def readItemDeptNum(codes):
    sql_script = '''SELECT
      *
    FROM
        t2
        code in ({codes})
        '''.format(codes=', '.join("'" + item + "'" for item in codes))
    # sql_script = sql_script % ','.join(['%s']*len(tongyicodes))
    sql_data = connetmysql(host=MYSQL_HOST_ITEM, port=MYSQL_PORT_ITEM,
                           user=MYSQL_USER_ITEM,
                           password=MYSQL_PASSWORD_ITEM, sql=sql_script,
                           database=MYSQL_DATABASE_ITEM)

    return sql_data

if __name__ == "__main__":
    platform_data = readPlatformDept()
    item_data = readItemDepNum(platform_data['id'])
    item_data.to_excel('item_query_excel.xlsx')

然后程序就写好了,需要写一个shell脚本启动一些python

python3 start.py

因为是java开发,python并没有学过,所以通过自己摸索,还是可以写出来,对比一下java,觉得python语法有时候确实比较简便,比如要导出Excel,一行代码就可以,然后到linux上部署也比较容易,所以觉得后端程序员掌握一门脚本语言还是有需要的

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014427391/article/details/124823705

智能推荐

手动去upx特征_upx -d-程序员宅基地

文章浏览阅读5.3k次,点赞7次,收藏31次。众所周知,作为一款优秀的可执行文件压缩工具,UPX受到程序开发者的广泛欢迎。然而一些病毒、木马和其他恶意程序使用了UPX来隐藏自身行为,这使得它拥有不好的名声,导致了杀毒引擎对一些无害的应用程序的误报。有些杀毒引擎甚至将所有加了UPX壳的程序视为病毒,比如ClaimAV、Comodo、F-Prot等等。其实,不仅是UPX,其它的压缩壳,比如ASPack、PECompact也是如此。今天我们要..._upx -d

Python Coroutine 池化实现-程序员宅基地

文章浏览阅读500次,点赞12次,收藏12次。在当今计算机科学和软件工程的领域中,池化技术如线程池、连接池和对象池等已经成为优化资源利用率和提高软件性能的重要工具。然而,在 Python 的协程领域,我们却很少见到类似于 ThreadPoolExecutor 的 CoroutinePoolExecutor。为什么会这样呢?首先,Python Coroutine 的特性使得池化技术在协程中的应用相对较少。与像 Golang 这样支持有栈协程的语言不同,Python Coroutine 是无栈的,无法跨核执行,从而限制了协程池发挥多核优势的可能性。

Java简单的加密解密算法,使用异或运算_fecoi()*&<mncxzpkl-程序员宅基地

文章浏览阅读2.2k次。/** * 简单的异或加密算法 * * @author 李奔 * @date 2018年5月21日 * @time 上午10:08:10 */public class DeEnCode { private static final String key0 = "FECOI()*&amp;&lt;MNCXZPKL"; private static final Charset c..._fecoi()*&

为什么c++输出char类型变量的地址出现的是乱码?_c++ new char 输出乱码-程序员宅基地

文章浏览阅读3k次,点赞3次,收藏13次。char a = 'h';cout &lt;&lt; &amp;a;就会出现乱码:h烫烫烫烫篾看了这个贴:https://bbs.csdn.net/topics/310062432改成printf("%p",&amp;a);或者std::cout &lt;&lt; (void *)&amp;a;就可以输出地址了。原因:(摘自上面提到的贴子评论)cout &lt;&l..._c++ new char 输出乱码

pytorch JIT 和 TorchScript 详解[email protected]程序员宅基地

文章浏览阅读9.3k次,点赞8次,收藏25次。笔者自己对这一块也只是一知半解,如果内容有出入,欢迎指出。一、PyTorch 特性我们都喜欢PyTorch的动态性和易用性。但在部署方面,这些品质不如性能和可移植性理想。为了提高pytorch的可移植性,引入了 TorchScript机制。首先,探究一下 PyTorch 的生态系统,PyTorch 主要支持两种模式:Eager mode: 它用于构建原型、训练和实验Script mode:它主要关注在生产用例方面,包含 PyTorch JIT 和 TorchScript两个部分。那么,[email protected]

Windows tomcat 配置服务启动编码UTF-8_tomcat8.exe 设置启动编码-程序员宅基地

文章浏览阅读1k次。Windows tomcat 配置服务启动编码UTF-8_tomcat8.exe 设置启动编码

随便推点

python编辑视频教程_Maya中Python编辑基础核心技术训练视频教程-程序员宅基地

文章浏览阅读140次。本教程是关于Maya中Python编辑基础核心技术训练视频教程,时长:超过20小时,大小:3.1 GB,MP4高清视频格式,教程使用软件:Maya,附源文件,作者:Geordie Martinez,共8个章节,语言:英语。分享Autodesk Maya是美国Autodesk公司出品的世界顶级的三维动画软件,应用对象是专业的影视广告,角色动画,电影特技等。Maya功能完善,工作灵活,易学易用,制作效..._learn python inside maya

hcip3_interface tunnel1-程序员宅基地

文章浏览阅读111次。要求:1.R4为ISP,其上只能配置IP地址,R4与其他所有直连设备间使用公有IP;解决ospf不规则区域的3种方式都得使用.2.整个osPF环境p地址为172.16.0.0/16进程1oo使用192.168.1.0/243.所有设备均可访问R4的环回r14上有两个环回减少LsA的更新量,加快收敛,保障更新安全4.全网可达解决不规则区域的三种方式1.Tunnel在两台ABR上创建tunnel,然后将其宣告到OSPF协议中;缺点:1、选路不佳 2、周期hello和更新均对中间区域进行影响._interface tunnel1

ESP32系列区别—ESP32-WROOM-32和ESP32-WROOM-32E和ESP32-WROOM-32U的区别_esp32wroom32d和32e区别-程序员宅基地

文章浏览阅读1.8w次,点赞3次,收藏14次。简单来说就是32E和32U是32的升级版本,具有更高的稳定性具体的区别建议官网查看:模组概览 | 乐鑫科技最近有新项目要用到32E,要去某宝购买回来练练手,但是发现有芯片和开发板,开发板更适合新手和软件开发者,但是再一看有搭载32的开发板,3u的开发板,一脸懵,百度了区别但是广告更多,还是决定看官网,对比可以看到32E是32U和32的升级版本,具有更高的稳定性安全性。所以还是选32E的吧,虽然贵的/>_</受不了,上传的图片被压缩了,大家还是官网看把..._esp32wroom32d和32e区别

Windows使用vscode远程在Linux服务器上编写代码_vscode连接linux服务器写代码-程序员宅基地

文章浏览阅读1.5k次。之前一直是使用XSHELL登录服务器,用VIM编写代码,进行调试,但是VSCODE确实太香。偶然发现微软给VSCODE加入了SSH-REMOTE插件,从而在本地使用VSCODE操作服务器上的程序不再梦幻。概述方法其实非常简单:安装openssh生成本地公钥公钥上传服务器配置VSCODE准备工作安装openssh的方法很多,可以用POWERSHEEL命令行安装,也可以下载openssh安装。生成本地公钥的方法跟以前写的方法一样,不再说了。把公钥复制到服务器.ssh文件夹的author_vscode连接linux服务器写代码

C语言实现数字图像处理:边缘检测与边缘计算_使用c语言实现sobel算子边缘检测-程序员宅基地

文章浏览阅读221次。然后,使用嵌套的循环遍历输入图像的每个像素点(除去边缘像素),并对每个像素点应用Sobel算子进行卷积计算。计算过程中,我们将得到的水平和垂直方向上的边缘强度相加,并将其限制在0-255的范围内。边缘检测对于识别图像中的边缘区域非常有用,并在许多计算机视觉和图像处理应用中得到广泛应用。该算法基于卷积操作,在图像中滑动一个特定的核(矩阵)来计算每个像素点的边缘强度。边缘检测是数字图像处理中的一项重要任务,它用于识别图像中的边缘区域。在本文中,我们将使用C语言来实现基本的边缘检测算法,并计算边缘的特征。_使用c语言实现sobel算子边缘检测

vc中调用ado的方法_c语言可以调用ado吗-程序员宅基地

文章浏览阅读342次。 说明: ole DB是基于com技术的,而ado是ole DB之上的,ADO本身也是基于COM的。 COM编程需要初始化,可以使用CoInitialize,使用完后可以用CoUninitialize释放。一、在头文件中添加动态连接库文件msado15.dll的导入 假设文件位置为:D:/Program Files/Common Files/System/ado/msado15.dll_c语言可以调用ado吗

推荐文章

热门文章

相关标签