Django ORMの基本操作:データの作成・取得・更新・削除

データの作成(Create)

1. createメソッドによる作成

モデルクラスのobjects.create()メソッドを使用

UserModel.objects.create(username="山田太郎", age=25)

2. 辞書データからの作成

辞書データを展開してオブジェクトを作成

user_data = {"username": "鈴木花子", "age": 30}
user_obj = UserModel(**user_data)
user_obj.save()

3. 属性設定による作成

オブジェクトインスタンスを作成後、属性を設定

user_obj = UserModel()
user_obj.username = "佐藤健太"
user_obj.age = 28
user_obj.save()

データの削除(Delete)

1. 単一レコードの削除

getメソッドで特定レコードを取得して削除

UserModel.objects.get(id=5).delete()

2. 複数レコードの一括削除

filterメソッドで条件に合致するレコードを削除

UserModel.objects.filter(age__lt=20).delete()

データの更新(Update)

1. 単一レコードの更新

取得→変更→保存の手順で更新

user_obj = UserModel.objects.get(id=1)
user_obj.username = "更新済みユーザー"
user_obj.save()

2. 複数レコードの一括更新

filterとupdateを組み合わせて一括更新

UserModel.objects.filter(username="old_name").update(username="new_name")

データの取得(Retrieve)

基本的な取得方法

# 全レコード取得
UserModel.objects.all()

# 辞書形式で取得
UserModel.objects.values()

# 特定フィールドのみ辞書形式で取得
UserModel.objects.values('id', 'age')

# タプル形式で取得
UserModel.objects.values_list()

# 特定フィールドのみタプル形式で取得
UserModel.objects.values_list('username')

フィルタリング検索

filterメソッドと検索述語を使用

# 前方一致検索
UserModel.objects.filter(username__startswith="田中")

# 部分一致検索
UserModel.objects.filter(username__contains="user")

検索述語の種類

  • exact: 完全一致
  • contains: 部分一致(LIKE '%xx%')
  • in: リスト内一致
  • gt: 大なり
  • lt: 小なり
  • gte: 以上
  • lte: 以下
  • startswith: 前方一致(LIKE 'x%')
  • endswith: 後方一致(LIKE '%x')
  • range: 範囲指定
  • regex: 正規表現

条件除外検索

UserModel.objects.exclude(username__contains="admin")

ソート検索

# 昇順ソート
UserModel.objects.order_by('age').values_list('age')

# 降順ソート(フィールド名に-を付与)
UserModel.objects.order_by('-age').values_list('age')

# 複数条件ソート
UserModel.objects.order_by('-age', '-id').values_list('age', 'id')

単一レコード取得

UserModel.objects.get(id=10)

件数取得

UserModel.objects.filter(username="山田太郎").count()

集計クエリ

from django.db.models import Avg, Sum, Count, Max, Min

# 平均値
UserModel.objects.aggregate(avg_age=Avg('age'))

# 合計値
UserModel.objects.aggregate(total_age=Sum('age'))

# 件数
UserModel.objects.aggregate(user_count=Count('age'))

# 最大値
UserModel.objects.aggregate(max_age=Max('age'))

# 最小値
UserModel.objects.aggregate(min_age=Min('age'))

タグ: Django ORM データベース Python バックエンド開発

6月21日 20:13 投稿