首頁 > 軟體

Python實現SqlServer查詢結果並寫入多個Sheet頁的方法詳解

2022-12-07 14:00:35

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

執行結果

嗯,這就非常完美的寫入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檔案

程式碼範例

# -*- 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的操作。

到此這篇關於Python實現SqlServer查詢結果並寫入多個Sheet頁的方法詳解的文章就介紹到這了,更多相關Python寫入多個Sheet頁內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com