• Skip to main content
  • Skip to secondary menu
  • Skip to primary sidebar
  • Skip to footer

AI活用エンジニアへの道

生成AI時代のエンジニアの生き方を考えるメディア(作成途中)

  • コラム
  • 生成AI
  • プログラミング
    • Python入門
    • Flask入門
    • Django入門
  • プロフィール
Home / プログラミング / Django / Django、モデルにレコードを登録するget_or_createの使い方をまとめました

Django、モデルにレコードを登録するget_or_createの使い方をまとめました

1 get_or_createの使い方
2 get_or_createの応用(filter)
3 関連記事

get_or_createの使い方

djangoのget_or_createは、DBからレコードを取得したりレコードを挿入したりすることができる。 get_or_createを使うと、 オブジェクトが存在しない場合は、DBにオブジェクトを登録して登録した値を返し、オブジェクトが存在する場合は、DBにオブジェクトを登録せずに値を返す。

以下のように利用する。

result, created = Model.objects.get_or_create(**kwargs)

*) kwargsには、挿入したいレコードの値を指定する。

DBに新たにレコードを挿入しなかった場合には、 createdにはFalseが返され、resultには指定したModelのオブジェクトが返される。

DBに新たにレコードを挿入した場合には、 createdにはTrueが返され、resultには挿入されたModelのオブジェクトが返される。

実際には以下のように記述する。

  • Userモデル
from django.db import models
class User(models.Model):
    first_name = models.CharField(max_length=128)
    last_name = models.CharField(max_length=128)
    email = models.EmailField(max_length=264, unique=True)
  • get_or_create
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'Project.settings') # djangoのDB接続設定読み込み
import django django.setup() # djangoのセットアップ
from appTwo.models import User # model

first_name = "Taro"
last_name = "Tanaka"
email = "aaa@mail.com"

# 1回目の実行
user, created = User.objects.get_or_create(first_name=first_name, last_name=last_name, email=email)

print(user.first_name) # Taro
print(user.last_name) # Tanaka
print(created) # True

# 2回目の実行
user2, created2 = User.objects.get_or_create(first_name=first_name, last_name=last_name, email=email)

print(user2.first_name) # Taro
print(user2.last_name) # Tanaka
print(created2) # False

また、get_or_create()で値を取得した際、選択条件で複数のオブジェクトが返されたら、MultipleObjectsReturnedエラーが返される。

  • MultipleObjectsReturnedエラー
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'Project.settings') # djangoのDB接続設定読み込み

import django
django.setup() # djangoのセットアップ

from appTwo.models import User

first_name = "Taro"
last_name = "Suzuki"
email = "bbb@mail.com"

# Taro,Suzukiが登録される
user, created = User.objects.get_or_create(first_name=first_name, last_name=last_name, email=email)

#前回登録したTaro,Tanakaと二つ返されるため、"MultipleObjectsReturned"エラーが返される
user2, created2 = User.objects.get_or_create(first_name=first_name)

get_or_createの応用(filter)

最後に、get_or_createの応用的な使い方について以下に記述する。

fileter関数とdjango.db.modelsパッケージのQクラスを用いて、モデルの一部を抽出しその中に**kwargsで指定した値のレコードがない場合は登録し、ある場合は登録しないこともできる。

以下のように利用する。


result, created = Model.objects.filter(Q=filter).get_or_create(**kwargs)

  • filterを用いたget_or_create
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'ProTwo.settings') # djangoのDB接続設定読み込み

import django
django.setup() # djangoのセットアップ

from django.db.models import Q
from app.models import User

last_name = "Suzuki"
email = "ccc@mail.com"

user, created = User.objects.filter(
    Q(first_name='Taro') | Q(first_name='Jiro')
).get_or_create(last_name=last_name, defaults={'first_name': 'Taro'})
# Userクラスで、first_nameがTaro,Jiroのものの中で、last_nameがSuzukiのものがあれば、Taro,Suzukiで登録し、createdにはTrueが返される

関連記事

Pythonの型ヒント:コレクション型とOptional型の使い方
Pythonの型ヒント:コレクション型とOptional型の…
Python型ヒントについて、変数と関数の引数と戻り値に付与する基本的な書き方について
Python型ヒントについて、変数と関数の引数と戻り値に付与…
【まとめ】よく使うLinuxのショートカット11選
【まとめ】よく使うLinuxのショートカット11選
覚えておくべきLinuxコマンド50選
覚えておくべきLinuxコマンド50選
FlaskでFormを用いてPOSTリクエストを行い、送信された値を取得する
FlaskでFormを用いてPOSTリクエストを行い、送信さ…
Flaskでabortを用いてHTTPException例外を強制的に発生させる
Flaskでabortを用いてHTTPException例外…

Primary Sidebar

人気記事

  • 1
    ITエンジニアとしてスキルを高めるためのUdemy講…
  • 2
    PyCharm,IntelliJのおすすめプラグイン一覧
  • no image 3
    Python未経験だが、フリーランスの案件に採用さ…
  • 4
    アメリカのシリコンバレーでプログラミングを無…

特集記事

  • 1
    Cursorの使用のポイントとコツ(コード補完、イ…
  • 2
    ITエンジニアとしてスキルを高めるためのUdemy講…

目次

1 get_or_createの使い方
2 get_or_createの応用(filter)
3 関連記事
StartCode ロゴ
AI時代のエンジニアを最速で育てる
法人向けIT研修で即戦力を育成しています。詳しくはお問い合わせください。
▶ 詳細はこちら
Django講座
【Udemy】Django入門講座(0からDjangoを学習: Python講座つき)
受講生6500人ほどの人気講座。<strong>View, Template, Model, Cla...
詳細 ▶

Footer

利用規約