LoginSignup
3
2

More than 5 years have passed since last update.

Django(PTVS)からAzureのTable ストレージを使用する方法

Last updated at Posted at 2016-10-25

Table ストレージとは

Azure Table ストレージ サービスは、大量の構造化データを格納します。
このサービスは、Azure クラウドの内部および外部からの認証された呼び出しを受け付ける NoSQL データストアです。
要は、外部にSQLのデータをストアできるというものです。PTVSを使った場合DjangoでSQLを使いたいという時には便利です。

Djangoのアプリケーション作成

こちらの方のサイトを参考にして作成いたします。
まず、新規でDjangoアプリの作成を行います。作成方法はこちらを参考にしてください。
Install Python Packageにてpipでazureのパッケージをダウンロードしてきてください。
azure_pip.png

ストレージ作成

Azureのポータルにて
【ストレージ アカウント】➡︎【追加】を選択します。
基本的には名前の部分だけ決めて後はデフォルトの設定で大丈夫です。
また、リソースグループを作成していない場合作成してください!
ストレージ設定.png

作成されると、ストレージアカウントに先ほど作成したアカウントから
【アカウント】➡︎【アクセスキー】➡︎【ストレージアカウント/key】
を覚えておきましょう!外部からアクセスする際に必要です。
アクセスキー.png

ソースコード記入

最初に紹介したサイトから参考にしました。
インポートされているazureの説明は省きますが詳しく知りたい方はこちらに説明があります。

views.py
from django.http import HttpRequest
from django.template import RequestContext
from datetime import datetime

from django.http import HttpResponse
from django.template.loader import render_to_string
from azure.storage.table import TableService, Entity

account_name = 'ストレージのアカウント名'
account_key = 'key(複数あるkeyのどれかで良い)'
table_service = TableService(account_name=account_name, account_key=account_key)
table_service.create_table('mytasks')

def list_tasks(request):      
    entities = table_service.query_entities('mytasks', '', 'name,category')
    html = render_to_string('app/test.html', {'entities':entities})     
    return HttpResponse(html)


def add_task(request):     
    name = request.GET['name']     
    category = request.GET['category']       
    table_service.insert_entity('mytasks', {'PartitionKey':name+category, 'RowKey':name, 'name':name, 'category':category})     
    entities = table_service.query_entities('mytasks', '', 'name,category')     
    html = render_to_string('app/test.html', {'entities':entities})     
    return HttpResponse(html)

def update_task(request):     
    name = request.GET['name']     
    category = request.GET['category']        
    partition_key = name + category     
    row_key = name     
    table_service.update_entity('mytasks', partition_key, row_key, {'PartitionKey':partition_key, 'RowKey':row_key, 'name': name, 'category':category})     
    entities = table_service.query_entities('mytasks', '', 'name,category')         
    html = render_to_string('app/test.html', {'entities':entities})     
    return HttpResponse(html)

test.html
<!DOCTYPE html>
<html>
    <head>
        <title></title>
    </head>     
    <body>
        <h2>My Tasks</h2> <br>     
        <table border="1">
            <tr>
                <td>Name</td>
                <td>Category</td>
            </tr>     
            {% for entity in entities %}     
                <form action="update_task" method="GET">
                    <tr>
                        <td>{{entity.name}} <input type="hidden" name='name' value="{{entity.name}}"></td>     
                        <td>{{entity.category}} 
                            <input type="hidden" name='category' value="{{entity.category}}"></td>     
                    </tr>     
                </form>     
            {% endfor %}     
        </table>     
        <br>     
        <hr>    
        <table border="1">
            <form action="add_task" method="GET">
                <tr>
                    <td>Name:</td
                    ><td><input type="text" name="name"></input></td>
                </tr>     
                <tr>
                    <td>Category:</td>
                    <td><input type="text" name="category"></input></td>
                </tr>     
                <tr>
                    <td><input type="submit" value="add task"></input></td>
                </tr>     
            </form>     
        </table>     
    </body>     
</html>

urls.py
urlpatterns = [
    url(r'^$', 'app.views.list_tasks'),
    url(r'^list_tasks$', 'app.views.list_tasks'),
    url(r'^add_task$', 'app.views.add_task'),
    url(r'^update_task$', 'app.views.update_task')

実行

実行を行うとName:Categoryがあるので、それぞれ記入して、add taskするとMy Tasksに値が格納されます。また、記入し直したり、Djangoを起動し直したりしても当然ですが、値は保持されます。

起動1.png
起動2.png

終わりに

ストレージのアカウントから実際に値が挿入されていることを確認できます。
実際にWindows内にSQLをインストールしたりするのはとても大変でめんどくさいので、すごくありがたい機能だと思うので、ぜひ試してください。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2