1. 程式人生 > >[SQL Server玩轉Python] 一.安裝環境及T-SQL呼叫python指令碼

[SQL Server玩轉Python] 一.安裝環境及T-SQL呼叫python指令碼

在開發專案過程中,更多的是通過Python訪問SQL Server資料庫介面,進行資料探勘的操作;而SQL Server2016版本之後,嵌入了強大的R、Python、Machine Learning等功能,尤其是Python程式碼置於儲存過程中,可以實現一些便捷資料分析功能。

本系列文章主要講解SQL Server 2017實現Python資料分析的文章,同時對比兩者的優劣。第一篇文章主要講解SQL Server開發Python環境的安裝過程及基本的資料分析程式碼實現。基礎性文章,自己也在不斷學習中,希望對你有所幫助。


一. 安裝SQL Server

(一) 安裝SQL Server 2017

本文安裝的軟體為:cn_sql_server_2017_developer_x64_dvd_11296175.iso
下載地址:

1.選擇“全新 SQL Server 獨立安裝或向現有安裝新增功能”。

2.安裝所需功能,注意機器學習服務、R、Python均需要安裝。

3.選擇預設例項“MSSQLSERVER”。

4.選擇混合性模型,包括SQL Server身份驗證(sa)和Windows身份驗證,同時添加當前使用者。

5.安裝。

安裝成功之後,你會發現仍然不能編寫SQL Server程式碼,這是因為還需要安裝SQL Server管理工具。


(二) 安裝SQL Server Management Studio

微軟官方下載地址:https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-2017
作者上傳下載地址:

安裝過程如下圖所示。

安裝成功之後即可使用SQL Server編寫程式碼了。


二. 配置Python和R開發環境

安裝成功之後我們新建一個數據庫test01,可以發現SQL語句可以編寫,但編寫Python或R程式碼仍然會報錯。
推薦文章:

https://docs.microsoft.com/zh-tw/sql/advanced-analytics/tutorials/run-python-using-t-sql?view=sql-server-2017
解決方法:
http://www.cnblogs.com/OpenCoder/p/7090370.html
http://www.kodyaz.com/t-sql/enable-external-script-on-sql-server-for-r-python.aspx

1.檢視Python是否已經啟用,檢視SQL Server環境下是否有Python可執行檔案。如:C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES。
注意,Scripts資料夾下可以通過pip安裝其他Python庫。

2.檢查是否已啟用外部指令,程式碼如下:


--檢視外部指令
sp_configure 'external scripts enabled'
--啟用外部指令碼,設定config_value為1
EXEC sp_configure  'external scripts enabled', 1
RECONFIGURE WITH OVERRIDE

如果run_value為1,則機器學習功能已經安裝成功並且可供使用。否則設定config_value為1。

3.此時如果執行Python程式碼,可能會提示錯誤“此 SQL Server 例項已禁用 sp_execute_external_script,請使用 sp_configure 的已啟用的外部指令碼對其進行啟用。” 這表示run_value仍然為0,此時需要開啟服務。開啟方法如下:
1) 開啟SQL Server例項資料庫引擎服務
2) 開啟SQL Server例項Lanuchpad服務
注意執行完後要重啟資料庫引擎服務和SQL Server Lanuchpad服務才會正式生效:

4.重啟電腦和資料庫引擎服務。

5.新增最簡單的Python和R語言程式碼,並執行。
Pyhton程式碼

EXEC sp_execute_external_script @language = N'Python', 
@script = N'print(3+4)'

執行結果如下:

R程式碼

 exec sp_execute_external_script  @language =N'R',   
 @script=N'OutputDataSet<-InputDataSet',     
 @input_data_1 =N'select 1 as hello'   
 with result sets (([hello] int not null));   
 go   

執行結果如下:


三. T-SQL呼叫Python資料分析入門

指令碼語言的基本語法如下,推薦官方文章 sp_execute_external_script (TRANSACT-SQL)

sp_execute_external_script   
    @language = N'language',   
    @script = N'script'  
    [ , @input_data_1 = N'input_data_1' ]   
    [ , @input_data_1_name = N'input_data_1_name' ]  
    [ , @output_data_1_name = N'output_data_1_name' ]  
    [ , @parallel = 0 | 1 ]  
    [ , @params = N'@parameter_name data_type [ OUT | OUTPUT ] [ ,...n ]' ] 
    [ , @parameter1 = 'value1' [ OUT | OUTPUT ] [ ,...n ] ]

推薦這篇文章供大家學習基礎知識:使用 T-SQL 執行 Python

1.程式一 呼叫包

execute sp_execute_external_script 
@language = N'Python', 
@script = N'
import math
a = 1
b = 2
c = a*b
print(a,b,c)
d = math.pi/6
print(math.sin(d))
'

輸出結果如下所示:

2.程式二 迴歸預測

execute sp_execute_external_script 
@language = N'Python', 
@script = N'
from sklearn import linear_model      
import matplotlib.pyplot as plt     
import numpy as np
#X表示匹薩尺寸 Y表示匹薩價格
X = [[6], [8], [10], [14], [18]]
Y = [[7], [9], [13], [17.5], [18]]
print(X)
print(Y)
#迴歸訓練
clf = linear_model.LinearRegression() 
clf.fit(X, Y)                         
res = clf.predict(np.array([12]).reshape(-1, 1))[0]
print(u"預測一張12英寸匹薩價格:$%.2f" % res)
#預測結果
X2 = [[0], [10], [14], [25]]
Y2 = clf.predict(X2)
'

輸出結果可以看到線性迴歸預測的價格。

後續文章將結合儲存過程詳細講解SQL Server玩轉Python的過程,比如這篇文章。
https://docs.microsoft.com/zh-cn/sql/advanced-analytics/tutorials/sqldev-py5-train-and-save-a-model-using-t-sql?view=sql-server-2017

希望文章對大家有所幫助,如果有錯誤或不足之處,還請海涵。最近經歷的事情太多,有喜有悲,關閉了朋友圈,希望通過不斷學習和寫文章來忘記煩勞,將憂鬱轉換為動力,每週學習都記錄下來。
(By:Eastmount 2018-11-12 晚上12點 https://blog.csdn.net/Eastmount/)