Python | Django | モデルを用いたデータベースのデータ更新方法

2021年6月30日

公開日:2021/6/30

Pythonには,DjangoというWebアプリケーションフレームワークがある.フレームワークのため,Djangoを利用するとWebアプリを通常よりも短時間で開発することが可能になる.

前記事にて,「モデルを用いたデータベースからのデータ取得方法」を記した.前記事での設定をそのまま引き継いだ上で,本記事では,「モデルを用いたデータベースのデータ更新方法」を以下2つの構成にて記す

  1. 特定の値(データ)の更新
  2. 抽出された複数の値(データ)の更新

    ◆実施環境

    Python 3.8.8
    Django 3.2.3

    1. 特定の値(データ)の更新

    “model_project"に"update_val.py"を作成する.以下のような構成になる.

    SQLiteをインストールし(詳細はこちら参照),"SQLITE EXPLORER"を開き,"cake"を右クリックし,"Show Table"をクリックする.現在の"Table"の内容は以下になる.

    “update_val.py"を以下のように編集する.データベースにおける"id=3″の"sales_amounts"と"update_date"を以下のように更新させる.

    (a)対象
    ・id=3

    (b)更新内容
    ・"sales_amounts": 5000
    ・"update_date": 現時刻(UTC時間)

    import os
    os.environ.setdefault('DJANGO_SETTINGS_MODULE','model_project.settings')
    
    from django import setup
    setup()
    
    from model_app.models import Cake
    
    from django.utils import timezone
    import pytz
    
    cake = Cake.objects.get(id=3)
    print(cake.cake_name)
    cake.sales_amounts = 5000
    cake.update_date = timezone.datetime.now(pytz.timezone('Asia/Tokyo'))
    cake.save()

    “update_val.py"で右クリックをすると,以下コマンドが現れるので,"Run Python File in Terminal"をクリックする.

    ターミナルに以下が出力される.

    Chiffon cake

    “SQLITE EXPLORER"を開き,"cake"を右クリックし,"Show Table"をクリックする."Table"の内容は以下のように更新された.

    (a)対象
    ・id=3

    (b)更新内容
    ・"sales_amounts": 5000
    ・"update_date": 現時刻(UTC時間)

     

    1. 抽出された複数の値(データ)の更新

    複数の値を更新するには,以下2通りの方法がある.(1)はループを利用して更新し,(2)は一括で更新するので,(2)の方が早く完了する.

    (1) “For~in"を利用する更新方法
    (2) “update"を利用する更新方法

    以下に各々の方法を記す.

    (1) “For~in"を利用する更新方法

    “update_val.py"を以下のように編集する.データベースの「birthplace = 'France’」の"birthplace"と"update_date"を以下のように更新させる.

    (a)対象
    ・birthplace = France

    (b)更新内容
    ・"birthplace": 全て大文字
    ・"update_date": 現時刻(UTC時間)

    import os
    os.environ.setdefault('DJANGO_SETTINGS_MODULE','model_project.settings')
    
    from django import setup
    setup()
    
    from model_app.models import Cake
    
    from django.utils import timezone
    import pytz
    
    cakes = Cake.objects.filter(birthplace='France').all()
    for cake in cakes:
      cake.birthplace = cake.birthplace.upper()
      cake.update_date = timezone.datetime.now(pytz.timezone('Asia/Tokyo'))
      cake.save()
    

    “update_val.py"で右クリックをし,"Run Python File in Terminal"をクリックする."SQLITE EXPLORER"を開き,"cake"を右クリックし,"Show Table"をクリックする."Table"の内容は以下のように更新された.

    (a)対象
    ・birthplace = France

    (b)更新内容
    ・"birthplace": 全て大文字(つまり,"FRANCE"に更新される)
    ・"update_date": 現時刻(UTC時間)

    (2) “update"を利用する更新方法

    “update_val.py"を以下のように編集する.データベースの「birthplace = 'FRANCE’」の"email"と"update_date"を以下のように更新させる.

    (a)対象
    ・birthplace = FRANCE

    (b)更新内容
    ・"email": 'cake@gmail.com’
    ・"update_date": 現時刻(UTC時間)

    import os
    os.environ.setdefault('DJANGO_SETTINGS_MODULE','model_project.settings')
    
    from django import setup
    setup()
    
    from model_app.models import Cake
    
    from django.utils import timezone
    import pytz
    
    Cake.objects.filter(birthplace='FRANCE').update(
      email = 'cake@gmail.com',
      update_date = timezone.datetime.now(pytz.timezone('Asia/Tokyo'))
    )

    “update_val.py"で右クリックをし,"Run Python File in Terminal"をクリックする."SQLITE EXPLORER"を開き,"cake"を右クリックし,"Show Table"をクリックする."Table"の内容は以下のように更新された.

    (a)対象
    ・birthplace = FRANCE

    (b)更新内容
    ・"email": 'cake@gmail.com’
    ・"update_date": 現時刻(UTC時間)

    以上