小屌丝:鱼哥,我想请教一个问题。
小鱼:国庆假期你经历了什么,让你变得如此的 “善良”?
小屌丝:别这么说,我一直很善良,至少,很正直…
小鱼:打住,直接点, 你有什么需要帮助的?
小屌丝:我就是想把查询的结果也入到excel表中
小鱼:然后呢?
小屌丝:sqlserver数据库。
小鱼:…好吧,还有其他要求吗?
小屌丝:没有了。
小鱼:OK,我就花费几分钟,给你整一个。
凡是涉及第三方库,必须需要安装,
老规矩,直接pip安装
- pip install openpyxl
- pip install pymssql
-
其它安装方式,直接看这两篇:
代码示例
- # -*- 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了。
小屌丝:鱼哥,我这一次要执行多个SQL语句,
小鱼:… 你不是说没有了吗
小屌丝:突然想起来的。
小鱼:好吧,还有其他的要求吗?
小屌丝:然后把每个SQL查询结果写入不同的sheet页
小鱼:xxxxxx!!还有吗????!!!
小屌丝:没有了。
小鱼:有也没有。
关于小屌丝提的要求, 我换一个写法,毕竟,多学几个知(姿)识(势),百利而无一害。
这次有pandas来写。
所以,第一步,安装
- pip install pandas
-
其它安装方式,直接看这两篇:
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("数据库链接关闭!")
-
执行结果
看到这里,今天的分享差不多就完成了。
今天主要通过链接SqlServer数据库,把查询数据结果写入到excel表中。
同时,应用openpyxl 和pandas两个模块,分别对excel的操作。