Python3,多种方法,同时执行多条SQL语句,并把查询结果分别写入不同Sheet页,妥妥的学到了。

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: Python3,多种方法,同时执行多条SQL语句,并把查询结果分别写入不同Sheet页,妥妥的学到了。

1、引言


小屌丝:鱼哥,我想请教一个问题。


小鱼:国庆假期你经历了什么,让你变得如此的 “善良”?

小屌丝:别这么说,我一直很善良,至少,很正直…

小鱼:打住,直接点, 你有什么需要帮助的?

小屌丝:我就是想把查询的结果也入到excel表中

小鱼:然后呢?

小屌丝:sqlserver数据库。

小鱼:…好吧,还有其他要求吗?

小屌丝:没有了。

小鱼:OK,我就花费几分钟,给你整一个。


2、代码实战


2.1 openpyxl写入excel

2.1.1 安装

凡是涉及第三方库,必须需要安装,

老规矩,直接pip安装


pip install openpyxl
pip install pymssql

其它安装方式,直接看这两篇:


《Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!》

《Python3:我低调的只用一行代码,就导入Python所有库!》


2.1.2 代码


代码示例


# -*- coding:utf-8 -*-
# @Time   : 2022-10-10
# @Author : Carl_DJ
'''
实现功能:
    1、python直接链接sqlserver数据库,读取数据库内容
    2、执行 查询结果,并写入到excel表中
应用模块:
  pymssql,os,openpyxl
'''
import os
import pymysql #mysql数据库链接
import pymssql #sqlserver数据库链接
import openpyxl
#输出文件夹
outfile_path = './data'
#如果没有outfile_path 这个文件夹,就自动创建
if not os.path.exists(outfile_path):
    os.mkdir(outfile_path)
#输出文件名称
filename = r'SQLtest.xlsx'
file_path= os.path.join(outfile_path,old_filename)
#创建数据库链接
#链接SqlServer
conn = pymssql.connect(host = "localhost",
        port = 3306,
        user = "",
        psd = "",
        database = "")
if conn:
    print("数据库链接成功")
time.sleep(3)
#sql查询语句
sql = "select UUID,KEYID,TYPE,NAME,PRICE from KEY_INFO WHERE NAME LIKE '%测试商品名称'"
#创建游标
cur = conn.cursor()
#执行sql语句
cur.execute(sql)
#返回查询结果
result = cur.fetchall()
#创建一个工作簿对象
wb = openpyxl.Workbook()
#定义sheet名
Key_Info_sheet = wb.create_sheet('KEY_INFO ',0)
#获取默认sheet页
# Key_Info_sheet = book.active
#获取表头信息
h1 = [filed[0] for filed in cur.description]
Key_Info_sheet.append(h1)
for i in result:
    Key_Info_sheet.append(i)
wb.save(file_path)
# 关闭数据库链接
cur.close()
conn.close()

执行结果

image.png


嗯,这就非常完美的写入excel了。


2.2 pandas写入excel

小屌丝:鱼哥,我这一次要执行多个SQL语句,

小鱼:… 你不是说没有了吗

小屌丝:突然想起来的。

小鱼:好吧,还有其他的要求吗?

小屌丝:然后把每个SQL查询结果写入不同的sheet页


小鱼:xxxxxx!!还有吗????!!!

小屌丝:没有了。

小鱼:有也没有。


关于小屌丝提的要求, 我换一个写法,毕竟,多学几个知(姿 )识(势 ),百利而无一害。


2.2.1 安装

这次有pandas来写。

所以,第一步,安装


pip install pandas

其它安装方式,直接看这两篇:


《Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!》

《Python3:我低调的只用一行代码,就导入Python所有库!》


2.2.2 代码


sql文档

image.png


代码示例

# -*- coding:utf-8 -*-
# @Time   : 2022-10-10
# @Author : Carl_DJ
'''
实现功能:
    1、python直接链接SqlServer数据库,实现SQL查询
    2、同时执行多条sql语句,查询结果分别写入不同的sheet页中;
应用模块:
    pandas,pymssql,os,time
'''
import pandas as pd
from pandas.io import sql
import pymssql
import time,os
#设置时间戳
now = time.strftime("%Y_%m_%d-%H%M%S",time.localtime())
print(f'执行时间:{now}')
#创建数据库链接
#链接SqlServer
conn = pymssql.connect(host = "localhost",
      port = 3306,
      user = "",
      psd = "",
      database = "")
if conn:
    print("数据库链接成功")
time.sleep(3)
#输出文件夹
file_path = './data'
#如果没有outfile_path 这个文件夹,就自动创建
if not os.path.exists(file_path):
    os.mkdir(file_path)
#输出文件格式
Outfile_name = ( 'SqlsTest' + now + '.xlsx')
#读取sql文件名称
sqls_name = r'SqlsFile.txt'
#sql执行脚本文件(参数化路径)
MCsql_file = os.path.join(file_path,MCsql_name)
#输出文件夹路径
Outfile_path = os.path.join(file_path,Outfile_name)
#把查询结果写入不同的sheet页,对sheet页进行命名
sheet_names = ['KEY_INFO','PRO_INFO']
#定义读取sql方法,返回sql语句
def sqls(MCsql_file):
    global sqlstrs
    with open(MCsql_file,'r',encoding='utf-8') as f:
        #每个sql之间,以“;”作为分隔符
        sqlstrs = f.read().split(';')
#定义数据查询方法
def quert_method(sql_str):
    #设置全局变量
    global df
    df = pd.read_sql(sql_str,con=conn)
#执行程序
if __name__ == '__main__':
    sqls(MCsql_file)
    #写入excel文件
    with pd.ExcelWriter(Outfile_path) as writer:
        for i in range(0,len(sqlstrs)):
            quert_method(sqlstrs[i])
            df.to_excel(writer,sheet_name=sheet_names[i],index=False,header=True)
print("数据写入完成!")
# 关闭数据库链接
conn.close()
print("数据库链接关闭!")

执行结果

image.png


3、总结


看到这里,今天的分享差不多就完成了。

今天主要通过链接SqlServer数据库,把查询数据结果写入到excel表中。

同时,应用openpyxl 和pandas两个模块,分别对excel的操作。

如果对pandas不调了解,可以阅读小鱼的这篇博文


《数据分析之Pandas从入门到放弃:代码+实战,9分钟带你推开Pandas大门!!!》

《Python3,Pandas 5行代码实现对excel 读写操作!》

《Python3,pandas自动处理exlce数据及yagmail邮件自动发送》

《Python3,3行代码,把excel转换成任意格式的word文档,老板直接给我涨薪10K!!!》

这里就不列举了,如果想学习更多的数据分析,可以点击小鱼的数据分析专栏。

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
14天前
|
SQL 数据挖掘 数据库
第三篇:高级 SQL 查询与多表操作
本文深入讲解高级SQL查询技巧,涵盖多表JOIN操作、聚合函数、分组查询、子查询及视图索引等内容。适合已掌握基础SQL的学习者,通过实例解析INNER/LEFT/RIGHT/FULL JOIN用法,以及COUNT/SUM/AVG等聚合函数的应用。同时探讨复杂WHERE条件、子查询嵌套,并介绍视图简化查询与索引优化性能的方法。最后提供实践建议与学习资源,助你提升SQL技能以应对实际数据处理需求。
91 1
|
29天前
|
机器学习/深度学习 数据可视化 算法
Python数值方法在工程和科学问题解决中的应用
本文探讨了Python数值方法在工程和科学领域的广泛应用。首先介绍了数值计算的基本概念及Python的优势,如易学易用、丰富的库支持和跨平台性。接着分析了Python在有限元分析、信号处理、优化问题求解和控制系统设计等工程问题中的应用,以及在数据分析、机器学习、模拟建模和深度学习等科学问题中的实践。通过具体案例,展示了Python解决实际问题的能力,最后总结展望了Python在未来工程和科学研究中的发展潜力。
|
13天前
|
Python
在VScode环境下配置Python环境的方法
经过上述步骤,你的VSCode环境就已经配置好了。请尽情享受这扇你为自己开启的知识之窗。如同你在冒险世界中前行,你的探索之路只有越走越广,你获得的知识只会越来越丰富,你的能力只会越来越强。
68 37
|
9天前
|
SQL 关系型数据库 MySQL
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
|
9天前
|
存储 索引 Python
[oeasy]python093_find方法_指数为负数_index_实际效果
本文介绍了Python中`find`方法与索引(index)的使用,包括负数索引的实际效果。回顾了`eval`函数的应用,并强调类名如`str`、`int`、`list`不可用作变量名以避免覆盖。通过示例解析了负数索引在字符串和列表中的作用,以及`index`方法的三个参数(value、start、stop)的用法。同时对比了`index`和`find`方法的区别:`index`找不到子串时抛出`ValueError`,而`find`返回-1。最后总结了正负索引的使用场景及两者的特性,提供了相关学习资源链接。
273 8
|
1月前
|
Python
解决Python报错:DataFrame对象没有concat属性的多种方法(解决方案汇总)
总的来说,解决“DataFrame对象没有concat属性”的错误的关键是理解concat函数应该如何正确使用,以及Pandas库提供了哪些其他的数据连接方法。希望这些方法能帮助你解决问题。记住,编程就像是解谜游戏,每一个错误都是一个谜题,解决它们需要耐心和细心。
86 15
|
1月前
|
存储 缓存 文件存储
uv安装python及其依赖的加速方法
国内在使用uv的时候,可能会涉及到装python的速度太慢的问题,为了解决这个问题,可以使用`UV_PYTHON_INSTALL_MIRROR`这个环境变量。除此以外,对于多人协作场景,`UV_CACHE_DIR`也是一个有用的环境变量。本文会介绍这两个变量。
726 10
|
17天前
|
Python
Python 中__new__方法详解及使用
`__new__` 是 Python 中的一个特殊方法,用于控制对象的创建过程,在 `__init__` 之前执行。它是类的静态方法,负责返回一个实例。如果 `__new__` 不返回对象,`__init__` 将不会被调用。本文详细介绍了 `__new__` 的作用、特性及与 `__init__` 的区别,并通过实例演示了其在单例模式中的应用,同时对比了 Python2 和 Python3 中的写法差异。
|
8月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
10月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
286 13

热门文章

最新文章