• 0
  • 0
分享
  • 同时执行多条SQL语句,并把查询结果分别写入不同Sheet页。
  • Carl_奕然 2022-10-25 16:31:29 字数 3385 阅读 944 收藏 0

1、引言

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

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

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

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

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

小鱼:然后呢?

小屌丝:sqlserver数据库。

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

小屌丝:没有了。

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

c42cb97911e143a1b015bed9c13f344e.gif

 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_奕然


'''
实现功能:
    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()

执行结果

3e946ce8a4774a8abf2f909c0c46e997.png

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

 2.2 pandas写入excel

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

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

小屌丝:突然想起来的。

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

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

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

小屌丝:没有了。

小鱼:有也没有。

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

0b4c393c1ae2490dbec07d4bf13c3ebc.jpg

 2.2.1 安装

这次有pandas来写。

所以,第一步,安装

pip install pandas

 2.2.2 代码

sql文档

8461cb1b06254e8a935fa479c752b82d.png

代码示例

# -*- coding:utf-8 -*-
# @Time   : 2022-10-10
# @Author : Carl_奕然

'''
实现功能:
    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("数据库链接关闭!")

执行结果

01919ad680df492895aaca4d413d78c4.png

 3、总结

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

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

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


我是奕然

  CSDN博客专家

  51Testing认证讲师

  集团金牌面试官;


关注我,带你学习Python领域更多更专业的技能。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   没有绝对的天才,只有持续不断的付出。对于我们每一个平凡人来说,改变命运只能依靠努力+幸运,但如果你不够幸运,那就只能拉高努力的占比。  2023年7月,我有幸成为了百度的一名测试工程师,从外包辞职了历经10000小时后,拿下了offer。相信同行都清楚,从外包进大厂有多难,运气之余,也离不开我自己的脚踏实地,所幸每踏出的一步都留下了厚厚的脚印。  下面是我面试百度软件测试工程师的面试经验总结,希望能帮助到你们!!  面试一  1、简单做一下自我介绍  2、简要介绍一下项目/你负责的模块/选一个模块说一下你设计的用例  3、软件生存周期及其模型是什么?  4、什么是软件质量?  5、说一下X...
            0 0 1186
            分享
          •   混沌工程的概念由Netflix最先提出,指“在分布式系统上进行实验的学科,目的是建立对系统承受生产环境中湍流条件能力的信心”。随着分布式系统的建设,单体应用迁移到分布式架构中,对系统的可靠性和容错性提出了更高的要求。为防止服务因为微小故障而产生雪崩效应,引发系统大面积崩溃,通过在分布式系统上进行受控实验,观察系统行为并及时发现问题,提升系统健壮程度。  Chaosblade是由阿里巴巴研发的开源混沌工程工具,用于模拟常见的故障场景。本文使用Ubuntu虚拟机和docker探索该工具的准备过程及部分常见故障的使用方法。  一、工具获取  Chaosblade工具有两种获取方法,可以从Gith...
            12 12 2167
            分享
          • 手把手教你测试微信小程序,附软件测试员必知的20个常见测试点!普通的移动app是需要安装的,但是绝大部分的app不会经常使用,但仍然会占用手机存储空间,所以开始出现免安装app,微信小程序实际是一种免安装的app。类似的比如华为、小米等手机厂商推出的快应用、支付宝小程序。微信小程序实际是运行在微信之上。小程序的类网页经过微信翻译之后以http数据的形式和服务器进行交互。小程序无法脱离微信来进行使用。微信小程序的页面可以包含:小程序页面(WXML+WXSS);M页页面(H5移动网页);toast信息(过一段时间会自动消失的信息,比如登录成功的提示信息,1、2秒后自动消失);弹窗。微信小程序功能测...
            14 15 3628
            分享
          •   最近几年,软件测试行业的发展比较迅速。可以从人员的薪资、技术的要求、岗位的细化等方面看出。几年前做功能测试达到熟练程度的,或许可以拿到一个不错的offer。短短3-5年,只会功能测试,找工作都困难。不知不觉中,你在浏览招聘信息时,经常会看到这么一条“熟悉或精通接口测试、自动化测试、渗透测试、APP专项测试中的一项或多项。至少熟练使用一种编程语言或脚本语言”。  这是一个初级测试工程师的招聘信息。同样是招聘功能测试人员,但是现在会在里面加上这么一条。很多人会问,为什么招功能测试,却要在招聘信息里面加上这么一条呢?原因是这样的:公司目前是做功能测试,但日后随着业务的开展,会随时需要用到新的测试...
            3 3 2828
            分享
      • 51testing软件测试圈微信