3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?