2025年2月19日 星期三 甲辰(龙)年 腊月十九 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

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

时间:03-19来源:作者:点击数:41

1、引言

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

在这里插入图片描述

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

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

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

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

小鱼:然后呢?

小屌丝:sqlserver数据库。

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

小屌丝:没有了。

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

在这里插入图片描述

2、代码实战

2.1 openpyxl写入excel

2.1.1 安装

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

老规矩,直接pip安装

  • pip install openpyxl
  • pip install pymssql

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

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()

执行结果

在这里插入图片描述

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

2.2 pandas写入excel

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

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

小屌丝:突然想起来的。

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

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

在这里插入图片描述

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

小屌丝:没有了。

小鱼:有也没有。

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

在这里插入图片描述

2.2.1 安装

这次有pandas来写。

所以,第一步,安装

  • pip install pandas

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

2.2.2 代码

sql文档

在这里插入图片描述

代码示例

  • # -*- 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("数据库链接关闭!")

执行结果

在这里插入图片描述

3、总结

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

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

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

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门