• 0
  • 0
分享
  • 同时执行多条SQL语句,并把查询结果分别写入不同Sheet页。
  • Carl_奕然 2022-10-25 16:31:29 字数 3385 阅读 893 收藏 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领域更多更专业的技能。

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 此文章为在拥有C语言基础的情况下,对小甲鱼的python课程进行学习的笔记,对涉及到的新概念与实用的语法知识进行了总结与归纳。1、Python中的BIFBIF:Built-in Functions,python中的内置函数,即为了方便程序员快速编写脚本程序而直接调用的一种函数。大意如同我们上数学课时定义函数f(x),g(x),h(x)等,而后解题过程中可以直接将数值代入指定的函数中,在这里python的BIF就相当于我们事先定义好的函数。我们较为常见的BIF例如:print() 打印到屏幕,即将括号里的内容显示到屏幕上;input() 接受用户输入并返回,用temp这个变量...
            0 0 1017
            分享
          •   2022软件测试行业调查报告正在进行中,点击链接http://vote.51testing.com/ 填写问卷,五门测试实战课程任选两门免费学习。  随着互联网产品更新迭代的速度加快,测试工程师在团队中的作用越来越重要,企业对于测试工程师的需求量也越来越大,给出的薪资也不尽相同,那么测试工程师具备什么样的技能才能收获高薪呢?霸哥今天将市面上常招聘的几类测试工程师都逐一分析,给大家做个参考。  目前软件测试常见的岗位大致分为功能测试、自动化测试、性能测试、安全测试、测试开发等类别,霸哥以第三方招聘平台上的薪资统计作参考,来分析一下各个类型的工程师要具备怎样的技能,这里以一线城市北京为例。  ...
            0 0 1269
            分享
          •   前言  我们在做自动化时,当自动化测试用例编写完成后,都会想着将其自动执行程序,或者说通过定时的形式进行执行我们的自动化测试程序,这样才能真正意义上实现自动化测试。哪么大家知道都有哪些方法可以帮助我们实现这个功能吗?接下来小编就简单介绍下集中如何定时执行我们的自动化测试用例程序。  Jenkins  说到定时任务,肯定有人想到jenkins,没错,jenkins是一款持续集成的工具,其中里面就有一个小功能构建定时器,可以很好的帮助我们实现这个功能。  使用方法  1.通过进入到对应的测试项目内中,然后点击configure(配置)进入其页面中。  2.配置页面中的Build Trigger...
            0 0 1807
            分享
          • 把做Android开发以来碰到的一些不错的性能分析工具做个整理汇总...Debug GPU Overdraw类型:系统自带功能UI渲染检测功能(打开Settings,然后到 Developer Options -> Debug GPU Overdraw 选择 Show overdraw areas,手机系统设置中文的孩纸,自行对照翻译进去哈)作用:用来检测UI的重绘次数,开发者可以用来优化UI的性能。使用心得:检测UI性能的利器,对于开发者做UI优化的帮助挺大的。因为大量的重绘容易让app造成卡顿或者直接导致丢帧的现象。开发者熟悉View的绘制原理可以结合对一些布局或者自定义控件做相应的...
            13 13 886
            分享
          •   测试人初到一个公司,往往公司的测试团队和规模已经完善,我们需要做的就是跟着公司的节奏走。因为相应的制度和流程已经完善,不需要额外操心太多与测试执行层面无关东西。  但是当流程和制度没有的情况下,我们应该怎么办呢?  本篇文章适用于初到一个公司、公司新引进测试流程,却不知道如何从0开始的同仁。以下是我近期的总结,方案有可能不是最完美的,但可以参考,有一定的借鉴作用。  整篇文章逻辑结构:  首先介绍什么是落地;  其次更为重要的思想;  最后经过这一年总结还有哪些不足之处,进而指出我打算接下来执行的方案。  何为落地  不知道大家接触过“落地页”这个词没有,我是在需求介绍文档里第一次见到这个...
            0 0 682
            分享
      • 51testing软件测试圈微信