Visual Studio Code と Python で Azure Data Services にアクセスしてみよう (Azure SQL Database 、 Azure Machine Leaning 編 )

Microsoft Japan Data Platform Tech Sales Team
清水

みなさん、こんにちは。昨年末の記事では、 Visual Studio 2015 で Python 環境を構成し、 SQL Server 、 Azure SQL Database にアクセスする際の手順やポイントをお伝えしましたが、いかがだったでしょうか? 今回は、 Visual Studio Code で Python 環境を構成し、 Azure SQL Database 、 Azure Machine Learning へアクセスする際の手順、ポイントをお伝えします。

Visual Studio Code とは

Visual  Studio Code( 以降 VS Code)  は、 Visual Studio と名前はついていますが、 Visual Studio 2015  や Visual Studio 2017  RC とは異なり、軽量かつ高速な高機能エディターです。  VS Code の詳細については、以下のサイトをご参照下さい。

Visual Studio Code image

VS Code は Windows に加え、 Linux  ,  Mac の環境でも使用可能ですが、ここでは、 Windows の環境を前提とします。

 

VS Code のインストール

以下のサイトから最新版の Visual Studio Code のインストーラーがダウンロード可能です。

 

Download Visual Studio Code

 

インストーラーをダウンロードしたら、これを実行し VS Code をインストールします。

image

インストール後、 VS Code を起動すると、以下のような画面が表示されるので、imageをクリックし、エクスプローラーを表示します。続いて、「フォルダーを開く」をクリックし、ファイルを配置するフォルダを指定します。

image

以下では「 WORK 」というフォルダを開いています。この状態でimageをクリックし、ファイル名を入力すると、エクスプローラーの右側に作業中ファイルが開かれます。

image

拡張機能 のインストールと設定

拡張機能のインストール前に Python のインストールを行います。ここでは、 インストールが容易かつデータ分析向けのディストリビューションという理由から Anaconda を使用することとします。詳細については、以下の記事の「 Python のインストール」ご参照下さい。

 

Visual Studio 2015 で Python 環境を構成し、 SQL Server 、 Azure SQL Database にアクセスしてみよう

 

Anaconda は 2017/2/25 現在、 Python 2.7 及び Python 3.6 を含むものが最新ですが、Python 3.5 等を含む以前のバージョンのインストーラーもダウンロードサイト内のリンクからダウンロード可能のようです。筆者の都合で恐縮ですが、今回動作確認を行った環境は Python 3.5 のため、以降では Python 3.5 を前提として説明を行います。

VS Code の特徴の 1 つとして、拡張機能があります。拡張機能を活用することで、より効率的なコーディングやデバックが可能になります。imageをクリックし、 ”Pyhton” と入力すると Python に関連した拡張機能の一覧が表示されます。各拡張機能の「インストール」をクリックすることで、インストールが可能です。 Python に関連した拡張機能は多数存在しますが、ここでは下図の「 Python 」という拡張機能を選択することとします。

image

インストールが完了したら、簡単な Python のコードを記述し、動作確認を行います。imageをクリックし、ファイル名に ”test.py” と入力し、ファイルを開きます。 “p” だけを入力すると候補が表示され、 Intellisense が有効なことが確認できます。また、画面下のステータスバーを確認すると、拡張子が .txt の場合はプレーンテキストと表示されていたのが、.py の場合には、 Python になっていることが確認できます。

image

“Hello!” とだけ表示する Python のコードを記述、保存します。作業中ファイルの画面を右クリック、メニューから「 Run Python File in Terminal 」 を選択し、コードを実行します。コードの画面の下に実行画面が表示されるので、正常に実行されていることを確認します。

image

 

Azure SQL Database へのアクセス

Python から Azure SQL Database や SQL Server へのアクセスには、 pyodbc や pymssql 等を使用することが一般的です。ここでは、 Python から ODBC を経由して SQL Server  、 Azure SQL Database にアクセスを行う pyodbc を選択します。なお、最新の ODBC ドライバは以下のサイトからダウンロード可能です。

 

Microsoft® ODBC Driver 13 for SQL Server® - Windows + Linux

https://www.microsoft.com/ja-JP/download/details.aspx?id=50420

 

pyodbc を Python に追加するため、 Anaconda のパッケージマネージャの conda を使用します。コマンドプロンプトを起動し、以下のように入力すると、 pyodbc をインストールすることが可能です。

 

 conda install -c anaconda pyodbc=3.0.10

 

なお、 pyodbc  の詳細については、以下をご参照下さい。

 

https://mkleehammer.github.io/pyodbc/

 

ここでは、アクセス先の Azure SQL Database に AdventureWorksLT サンプルデータベースが作成され、 VS Code からアクセス可能とします。拡張子が “.py” のファイルを新規作成し、以下のようなコードを記述、保存、実行します。

 #pyodbcのインポート
import pyodbc

#接続先 SQL Server 名
server = 'SQL Server 名'
#接続先データベース名
database = 'AdventureWorksLT' 
#SQL Server 認証で使用するログイン名
username = 'ログイン名'
#SQL server 認証で使用するパスワード
password = 'パスワード'

#Azure SQL Database への接続
#SQL Server 認証の場合
cnxn = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server}; SERVER='+server+'; DATABASE='+database+' ;UID='+username+'; PWD='+ password + '; ENCRYPT=Yes')

#カーソルのオープン
cursor = cnxn.cursor()

#クエリの実行と行の取得
cursor.execute("SELECT AccountNumber, COUNT(*) FROM SalesLT.SalesOrderHeader GROUP BY AccountNumber ORDER BY AccountNumber;") 
row = cursor.fetchone() 

#取得した行の表示
while row: 
    print(row[0], row[1])
    row = cursor.fetchone()

#t1テーブルを作成
cursor.execute("CREATE TABLE t1(co1 int primary key,col2 varchar(10))")
#t1テーブルに行を追加
cursor.execute("INSERT t1 VALUES(1,'test1')")
#トランザクションのCOMMIT
cnxn.commit()

#接続のクローズ
cnxn.close()

pyodbc では、暗黙的なトランザクションが有効になっているため、 INSERT の直後に commit を実行し、トランザクションをコミットしています。 正常に実行出来ると、以下のような画面が表示されます。

image

 

Azure Machine Leaning へのアクセス

Azure Machine Leaning( 以降 Azure ML) では、作成した予測モデルを、 Web サービスとして公開することが可能です。ここでは 、 userID を 1 つ送信すると、おすすめ Item の ID を 5 つ返す Web サービスを前提とします。 Azure ML では、 Web サービスの公開方法として、「 Deploy Web Service [Classic] 」と「 Deploy Web Service [New] Preview 」の 2 つバージョンが使用可能ですが、ここでは「 Deploy Web Service [New] Preview 」を用いて公開した Web サービスを前提とします。

image

「 Deploy Web Service [New] Preview 」を用いて公開した Web サービスの管理やサンプルコードの参照を行うには、 Azure Portal で対象 Azure ML の「概要」を表示し、「 Machine Learning Web サービス管理の起動」をクリックします。管理画面が表示されたら、画面上部の「 Web Services 」をクリックすると、 Web サービスの一覧が表示されるので、対象の Web サービスをクリックします

image image

その後、以下の画面が表示されるので、「 Use Web Service 」をクリックします。

image

Web サービスの URL ( 下図では Request Response)  、 API キー ( 下図では Primary Key あるいは Secondary Key) や C# 、 Python 、 R 等で Web サービスにアクセスするためのサンプルコードが参照可能です。ここでは、 Python 3.5 を前提としているので、「 Python 3+ 」をクリックします。

image

VS Code で拡張子が “.py” のファイルを新規作成します。 上記の画面から Python のサンプルコードをコピー、ペーストし、 userID の値、 Web サービスの URL  、 API キーを修正し、保存、実行します。

 #urllibとjsonのインポート
import urllib.request
import json

data = {
        "Inputs": {
                "input1":
                [
                    {
                            'userID': "xxxxx", # おすすめ Item の ID を取得したい userID を指定
                    }
                ],
        },
    "GlobalParameters":  {
    }
}

body = str.encode(json.dumps(data))

url = 'https://xxxxx.services.azureml.net/xxxxx’ # Web サービスの URL に置き換えます。
api_key = 'abc123' # Web サービスの API キーに置き換えます。
headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key)}

req = urllib.request.Request(url, body, headers)

try:
    response = urllib.request.urlopen(req) # Web サービスにリクエストを送信

    result = response.read() #Web サービスからリクエストの結果を取得
    print(result)

except urllib.error.HTTPError as error: # エラーハンドリング
    print("The request failed with status code: " + str(error.code))

    # Print the headers - they include the requert ID and the timestamp, 
    # which are useful for debugging the failure
    print(error.info())
    print(json.loads(error.read().decode("utf8", 'ignore')))

正常に実行出来ると、 Item 1 から Item 5 の ID が返されます。

image

今回は、 VS Code で Python 環境を構成し、 Azure SQL Database 、 Azure Machine Learning にアクセスする際の手順とポイントをご紹介しましたが、いかがだったでしょうか ?Python から Azure SQL Database 、 Azure Machine Learning にアクセスする際にお役に立てれば幸いです。

 

関連記事

Visual Studio 2015 で Python 環境を構成し、 SQL Server 、 Azure SQL Database にアクセスしてみよう Azure Machine Learning のサンプルを使って機械学習を始めてみよう! Azure Machine Learning Studio を使ってモデルをスクラッチから構築してみよう