Python | Django | モデルを用いたデータベースのデータ更新方法
公開日:2021/6/30
Pythonには,DjangoというWebアプリケーションフレームワークがある.フレームワークのため,Djangoを利用するとWebアプリを通常よりも短時間で開発することが可能になる.
前記事にて,「モデルを用いたデータベースからのデータ取得方法」を記した.前記事での設定をそのまま引き継いだ上で,本記事では,「モデルを用いたデータベースのデータ更新方法」を以下2つの構成にて記す
◆実施環境
Python 3.8.8
Django 3.2.3
“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時間)
複数の値を更新するには,以下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時間)
以上