SlideShare a Scribd company logo
1 of 52
Takayuki Shimizukawa
Django ORM道場
クエリの基本を押さえ
より良い形を身に付けよう
1
PyCon APAC 2023
● Philippines / Manila 在住
● Pythonプログラマー (2004~ 19年目
● Pythonコミュニティー運営
○ Python mini Hack-a-thon; 2009年~
○ Sphinx users JP; 2010年~
○ PyCon JP Association; accounting director
● (株) BePROUD; IT Architect
● Books 翻訳/執筆 (13冊)
about.me/shimizukawa
2
(CM)『Sphinxをはじめよう 第3版』
3
PythonドキュメンテーションといえばSphinx。
本書はSphinxで執筆し、re:VIew ビルダーで出力し、
組版までワンソースで出版まで行いました。
サイン会もやらせて
ていただきました
m(_ _)m
本日20F O'reillyさんでお安く購入できます!
アジェンダ
● このDjango ORM、どんなSQLを実行しているの?
● 一の形:実行しているSQLをいつも確認する
● 二の形:意図しないタイミングでのSQL発行を避ける
● 三の形:理想のSQLからORMを組む
● 質疑応答
4
デモコード
https://github.com/shimizukawa/pycon-apac-2023-django-orm-dojo
このDJango ORM、
どんなSQLを実行しているの?
5
6
それでは問題です
(実際の現場であったコードの簡易版です)
Q1. どんなSQLを実行してる?
7
レビュー時の
差分はここ
モデル定義
Q1. どんなSQLを実行してる?
8
モデル定義
Q1. どんなSQLを実行してる?
9
index.html
い. SELECT * FROM staff ORDER BY last_login
Q1. どんなSQLを実行してる?
10
い. SELECT * FROM staff ORDER BY last_login
ろ. SELECT pk, name FROM staff ORDER BY last_login
Q1. どんなSQLを実行してる?
11
Q1. どんなSQLを実行してる?
12
い. SELECT * FROM staff ORDER BY last_login
ろ. SELECT pk, name FROM staff ORDER BY last_login
は. 分からん
Q1. どんなSQLを実行してる?
13
い. SELECT * FROM staff ORDER BY last_login
ろ. SELECT pk, name FROM staff ORDER BY last_login
は. 分からん
Q1. どんなSQLを実行してる?
14
は. 分からん。実際に観察してみましょう。
DEMO
注目したのはここ
デモコード
https://github.com/shimizukawa/pycon-apac-2023-django-orm-dojo
Q1. どんなSQLを実行してる?
15
は. 分からん。実際に観察してみましょう。
SQLはQuerySetの使い方によって変わります。
注目したのはここ
「only?大丈夫かな?」と思ったあなたは、...
ORM師範になれるかも💪
「い」「ろ」を選んだあなたは、....
Django ORM道場へようこそ!
みなさんの選択は?
16
Django ORM道場へようこそ
● Django ORMは便利なやつですが、...
○ 時々、とても効率の悪いSQLを実行しているかも
○ 先ほどの例は、N+1と呼ばれるヤツです
● 経験や勘に頼らず、
処理を効率良く行うことができるよう、
道場で、基本の形から見なおしていきましょう。
17
3つの基本形
● 1つ、実行しているSQLをいつも確認しよう
● 1つ、意図しないタイミングでのSQL発行を避けよう
● 1つ、理想のSQLからORMを組もう
18
(CM) BeProud メンバー募集中!
19
Pythonプログラマー、他、ソフトウェア開発やっていくぞ!という
メンバーを通年募集中です!
今すぐBeProud ブースへ!!
自社サービス 書籍執筆 受託開発
一の形:実行しているSQLを
いつも確認しよう
20
実行しているSQLをいつも確認
21
DjangoでSQL実行ログを確
認するには、settings.py に
数行追加しましょう。
(日時もログ出力するにはもうちょ
っと色々設定してください)
では、コンソールログを確
認してみましょう。
ここを追加
実行しているSQLをいつも確認
22
1. 画面アクセスでSQLが表示される
2. migrationでもSQLが表示される
3. N+1の原因コードを修正
DEMO
デモコード
https://github.com/shimizukawa/pycon-apac-2023-django-orm-dojo
実行しているSQLをいつも確認
23
1. 画面アクセスでSQLが表示されました
2. migrationでもSQLが表示されました
3. N+1の原因コード修正が確認できました
補足: only も使い方次第
● DBとの通信を減らすには only が有効
○ 巨大なデータを持つカラムが参照不要と分かっている場合
○ 数万件を取得して、特定カラムだけ参照する場合
● QuerySetの使い方次第では逆効果に...
○ onlyに指定したカラムだけにアクセスする限り、問題なし
○ 指定外のカラムにアクセスすると、都度SQL発行が発動
24
ログは現状を映す鏡
● ログを見よう
○ スポーツ選手が鏡や動画で動きをチェックするように
○ ログ出力は、プログラミングにおける鏡
● SQLを常に観察する習慣を身に付けよう
○ QuerySetに手を加えるとき
○ QuerySetを使った処理を変更するとき
○ レビューに出すとき、SQL出力を添えると👍
○ レビューを受け取ったとき、SQLも確認すると👍
25
ログ以外でSQL確認
26
1. django-debug-toolbar
○ 👍Web画面にデバッグツールバーが
追加され、そこでSQL情報を確認
○ 👎Web画面がないと使えない
■ 最近はDjangoで画面を表示せずAPIサーバーのみの場合も増えており...
2. django-silk
○ 👍SQL実行を専用画面で俯瞰して確認
○ 👎DB保存するので本番利用は避けて!
[CM] 『自走プログラマー』
『自走プログラマー』は120のベストプラクティス
をPythonの先輩から学び、プログラミング中級者を
目指すための書籍です。
Django ORMの話題を含む、コードレビューや技術指導など
で伝えたい事例を多数紹介しています。
Web抜粋版の引用やリンクはご自由にどうぞ!
今すぐ 自走プログラマー で検索!
27
二の形:意図しないタイミング
でのSQL発行を避けよう
28
29
それでは問題 Q2 です
(実際の現場であった事例を元にした創作です)
Q2. 意図しないSQL発行を防止するには?
30
qs = SomeModel.objects.filter(...) の後どうする?
Q2. 意図しないSQL発行を防止するには?
31
qs = SomeModel.objects.filter(...) の後どうする?
QuerySetをテンプレートに渡したらN+1
が発生したのが問題でした
Q2. 意図しないSQL発行を防止するには?
32
qs = SomeModel.objects.filter(...) の後どうする?
QuerySetをテンプレートに渡したらN+1
が発生したのが問題でした
それなら、QuerySetをテンプレートに渡
さなければ問題にならないのでは?
Q2. 意図しないSQL発行を防止するには?
33
qs = SomeModel.objects.filter(...) の後どうする?
い. list(qs)でSQL発行を確定し、データクラスに詰め替え
それなら、QuerySetをテンプレートに渡
さなければ問題にならないのでは?
Q2. 意図しないSQL発行を防止するには?
34
qs = SomeModel.objects.filter(...) の後どうする?
い. list(qs)でSQL発行を確定し、データクラスに詰め替え
ろ. list(qs.values(...))でSQL発行を確定し、辞書化
それなら、QuerySetをテンプレートに渡
さなければ問題にならないのでは?
Q2. 意図しないSQL発行を防止するには?
35
qs = SomeModel.objects.filter(...) の後どうする?
い. list(qs)でSQL発行を確定し、データクラスに詰め替え
ろ. list(qs.values(...))でSQL発行を確定し、辞書化
は. qsをやめてpandas.read_sql()してDataFrame上で処理
それなら、QuerySetをテンプレートに渡
さなければ問題にならないのでは?
Q2. 意図しないSQL発行を防止するには?
36
qs = SomeModel.objects.filter(...) の後どうする?
い. list(qs)でSQL発行を確定し、データクラスに詰め替え
ろ. list(qs.values(...))でSQL発行を確定し、辞書化
は. qsをやめてpandas.read_sql()してDataFrame上で処理
に. 場合による
Q2. 意図しないSQL発行を防止するには?
37
qs = SomeModel.objects.filter(...) の後どうする?
い. list(qs)でSQL発行を確定し、データクラスに詰め替え
ろ. list(qs.values(...))でSQL発行を確定し、辞書化
は. qsをやめてpandas.read_sql()してDataFrame上で処理
に. 場合による
Q2. 意図しないSQL発行を防止するには?
38
に. 場合による。QuerySetの便利さを捨てる場合、デメリットも。
● い. list(qs)でSQL発行を確定し、データクラスに詰め替え
○ 👍クラス定義によってデータの目的が明確になり、扱いやすい
○ 👎詰め替えの実装はけっこう手間がかかる
■ 期待通り詰め替えられているかのUTも書かないといけないよね?
● ろ. list(qs.values(...))でSQL発行を確定し、辞書化
○ 👍取り出した時点で辞書になっているので、データ詰め替えが不要
○ 👎QuerySetを活用するDRF Serializer等とは相性が悪い
● は. qsをやめてpandas.read_sql()してDataFrame上で処理
○ 👍SQL発行が確定するのは間違いなさそう
○ 👎Pandasを持ち出す必要があったのかはよく考えよう
[事例]データクラスに詰め替え
あるプロジェクトでは、
● データクラスに詰め替える実装に変更
○ データ取得、加工、詰め替え、利用でレイヤー増加
■ 実装コード、テストコードの増加(開発時間の増加)
■ コードの見通しが悪化(レイヤーが増えただけ)
■ 付け焼刃の対策が増加(レイヤー間の変数引き回し)
■ データクラスが目的のないバケツ化(dictと変わらない)
● この状態で、ORMクエリの変更をレビューしました(´・ω・`)
39
40
ムダに複雑なコードは問題です
どのような対策が考えられるでしょう?
複雑な問題は複雑なまま解かない
● 課題: コードが複雑で変更が適切か分からない
○ 対策: コードをシンプルにしてから考える
● 課題: 複数レイヤーに分散して見通しが悪い
○ 対策: 考えるために、一旦コードを1ファイルへ集約
● 課題: データ詰め替えが手間
○ 対策: 省略できる処理をばっさり削除(開発ルールやフレームワークの都合は一旦無視)
● 課題: データクラスがバケツ化
○ 対策: データクラス廃止を検討
● 課題: 付け焼き刃の対策コードが多い
○ 対策: シンプルなコードで対策を考える
41
Q1のコードを例に説明
views.py
index.html
42
try1.py
Q1のコードを1ファイルに集約
43
1ファイルに集約して試行錯誤
44
DEMO
1.try1.py にコードを集約
2.python try1.py
3. ログを確認しながら試行錯誤
デモコード
https://github.com/shimizukawa/pycon-apac-2023-django-orm-dojo
ここを変更
try1.py
1ファイル上で試行錯誤した結果
45
試行錯誤のループ
● while 欲しいORMクエリが書けたか:
○ コード上に分散したORMクエリを修正
○ QuerySetの利用箇所を修正
○ その処理を呼び出すWeb画面を操作
○ DjDTやSlikを確認するため、画面を操作
コードが分散しているし、画面操作が多くて面倒....
1ファイルに集約して、コマンド実行でサクサク確認しよう
46
datamodels.py
views.py
serializers.py
index.html
試行錯誤の高速化
● while 欲しいORMクエリが書けたか:
○ 1つの .py ファイルを修正
○ .py ファイルを実行して、ログを確認
1ファイルに集約するメリット
● コードが1箇所で把握しやすい
● 画面操作が不要
● 適切なモジュールへの配置や整形に気にせず書ける
47
try1.py
try1.py
意図しないSQL発行を防止するには
48
1. コードの全体像を把握して、
2. ORMクエリの準備、データ加工、利用の処理から、
3. 必要十分なSQLが発行されるように全体を調整し、
4. 最も効率の良いコードにまとめる
この作業を、シンプルなコードで高速に回しましょう
models.py
datamodels.py
serializers.py
views.py
index.html
try1.py
models.py serializers.py
views.py index.html
三の形:理想のSQLから
ORMを組もう
49
三の形:理想のSQLから
ORMを組もう
50
続きは 書籍で!
ありがとうございました
Questions?
51
https://about.me/shimizukawa
Welcome to
Sprint after-party of
Register now!! →
Let’s have fun
at the end of
2023-10-29T18:30:00+09:00
Venue: Shibuya
Fee: >6,000 JPY
(discount for students)
(CM) 10/29(Sun) 18:30~ 非公式Party

More Related Content

What's hot

Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうRyuji Tsutsui
 
Cartographer を用いた 3D SLAM
Cartographer を用いた 3D SLAMCartographer を用いた 3D SLAM
Cartographer を用いた 3D SLAMYoshitaka HARA
 
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence ModelingDeep Learning JP
 
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込むYoshiki Hayama
 
ROS を用いた自律移動ロボットのシステム構築
ROS を用いた自律移動ロボットのシステム構築ROS を用いた自律移動ロボットのシステム構築
ROS を用いた自律移動ロボットのシステム構築Yoshitaka HARA
 
30th コンピュータビジョン勉強会@関東 DynamicFusion
30th コンピュータビジョン勉強会@関東 DynamicFusion30th コンピュータビジョン勉強会@関東 DynamicFusion
30th コンピュータビジョン勉強会@関東 DynamicFusionHiroki Mizuno
 
golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)Yuichi Murata
 
分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~Hideki Tsunashima
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理
3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理
3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理Toru Tamaki
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろHiroshi Yamashita
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチンyohhoy
 
SLAM入門 第2章 SLAMの基礎
SLAM入門 第2章 SLAMの基礎SLAM入門 第2章 SLAMの基礎
SLAM入門 第2章 SLAMの基礎yohei okawa
 
ROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
ROS2勉強会@別府 第7章PythonクライアントライブラリrclpyROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
ROS2勉強会@別府 第7章PythonクライアントライブラリrclpyAtsuki Yokota
 
「伝わるチケット」の書き方
「伝わるチケット」の書き方「伝わるチケット」の書き方
「伝わるチケット」の書き方onozaty
 
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーションakio19937
 
[DL輪読会] マルチエージェント強化学習と心の理論
[DL輪読会] マルチエージェント強化学習と心の理論[DL輪読会] マルチエージェント強化学習と心の理論
[DL輪読会] マルチエージェント強化学習と心の理論Deep Learning JP
 

What's hot (20)

Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
Cartographer を用いた 3D SLAM
Cartographer を用いた 3D SLAMCartographer を用いた 3D SLAM
Cartographer を用いた 3D SLAM
 
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
 
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
 
ROS を用いた自律移動ロボットのシステム構築
ROS を用いた自律移動ロボットのシステム構築ROS を用いた自律移動ロボットのシステム構築
ROS を用いた自律移動ロボットのシステム構築
 
30th コンピュータビジョン勉強会@関東 DynamicFusion
30th コンピュータビジョン勉強会@関東 DynamicFusion30th コンピュータビジョン勉強会@関東 DynamicFusion
30th コンピュータビジョン勉強会@関東 DynamicFusion
 
golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)
 
分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理
3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理
3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理
 
研究効率化Tips Ver.2
研究効率化Tips Ver.2研究効率化Tips Ver.2
研究効率化Tips Ver.2
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろ
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
SLAM入門 第2章 SLAMの基礎
SLAM入門 第2章 SLAMの基礎SLAM入門 第2章 SLAMの基礎
SLAM入門 第2章 SLAMの基礎
 
ROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
ROS2勉強会@別府 第7章PythonクライアントライブラリrclpyROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
ROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
 
Pietのエディタを作った話
Pietのエディタを作った話Pietのエディタを作った話
Pietのエディタを作った話
 
UnityとROSの連携について
UnityとROSの連携についてUnityとROSの連携について
UnityとROSの連携について
 
「伝わるチケット」の書き方
「伝わるチケット」の書き方「伝わるチケット」の書き方
「伝わるチケット」の書き方
 
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
 
[DL輪読会] マルチエージェント強化学習と心の理論
[DL輪読会] マルチエージェント強化学習と心の理論[DL輪読会] マルチエージェント強化学習と心の理論
[DL輪読会] マルチエージェント強化学習と心の理論
 

Similar to Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう

Nodeにしましょう
NodeにしましょうNodeにしましょう
NodeにしましょうYuzo Hebishima
 
ユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイントユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイントMasaki NIWA
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門kashew_nuts
 
Windowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようWindowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようKenji NAKAGAKI
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについてMasahito Zembutsu
 
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。Akihiro Kuwano
 
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...ICO
 
Pythonで検索エンジン2
Pythonで検索エンジン2Pythonで検索エンジン2
Pythonで検索エンジン2Yasukazu Kawasaki
 
20120915 Pythonは本当にBlenderの役に立っているか?
20120915 Pythonは本当にBlenderの役に立っているか?20120915 Pythonは本当にBlenderの役に立っているか?
20120915 Pythonは本当にBlenderの役に立っているか?Tetsuo Mitsuda
 
20101127 Android Usability Seminar
20101127 Android Usability Seminar20101127 Android Usability Seminar
20101127 Android Usability SeminarVisso株式会社
 
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウKentarou Mukunasi
 
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...74th
 
APIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjpAPIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjpTakeshi Komiya
 
アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱Koichi ITO
 
Boost.勉強会 #13 @仙台 鳥小屋
Boost.勉強会 #13 @仙台 鳥小屋Boost.勉強会 #13 @仙台 鳥小屋
Boost.勉強会 #13 @仙台 鳥小屋Yuto M
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Reportgree_tech
 
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜Yuji Nojima
 

Similar to Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう (20)

Nodeにしましょう
NodeにしましょうNodeにしましょう
Nodeにしましょう
 
ユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイントユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイント
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門
 
210630 python
210630 python210630 python
210630 python
 
Windowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようWindowsにpythonをインストールしてみよう
Windowsにpythonをインストールしてみよう
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて
 
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
 
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
 
Logcatの話
Logcatの話Logcatの話
Logcatの話
 
Pythonで検索エンジン2
Pythonで検索エンジン2Pythonで検索エンジン2
Pythonで検索エンジン2
 
20120915 Pythonは本当にBlenderの役に立っているか?
20120915 Pythonは本当にBlenderの役に立っているか?20120915 Pythonは本当にBlenderの役に立っているか?
20120915 Pythonは本当にBlenderの役に立っているか?
 
20101127 Android Usability Seminar
20101127 Android Usability Seminar20101127 Android Usability Seminar
20101127 Android Usability Seminar
 
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ
 
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
 
APIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjpAPIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjp
 
SnapDishの事例
SnapDishの事例SnapDishの事例
SnapDishの事例
 
アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱
 
Boost.勉強会 #13 @仙台 鳥小屋
Boost.勉強会 #13 @仙台 鳥小屋Boost.勉強会 #13 @仙台 鳥小屋
Boost.勉強会 #13 @仙台 鳥小屋
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Report
 
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
 

More from Takayuki Shimizukawa

Navigating Python: Milestones from Essential Reads
Navigating Python: Milestones from Essential ReadsNavigating Python: Milestones from Essential Reads
Navigating Python: Milestones from Essential ReadsTakayuki Shimizukawa
 
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022Takayuki Shimizukawa
 
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022Takayuki Shimizukawa
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Takayuki Shimizukawa
 
『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由Takayuki Shimizukawa
 
エキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころエキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころTakayuki Shimizukawa
 
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for DjangoRLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for DjangoTakayuki Shimizukawa
 
独学プログラマーのその後
独学プログラマーのその後独学プログラマーのその後
独学プログラマーのその後Takayuki Shimizukawa
 
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWayTakayuki Shimizukawa
 
Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018Takayuki Shimizukawa
 
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Takayuki Shimizukawa
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016Takayuki Shimizukawa
 
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016Takayuki Shimizukawa
 
素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集いTakayuki Shimizukawa
 
世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015Takayuki Shimizukawa
 
JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介Takayuki Shimizukawa
 
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み
Sphinxで作る貢献しやすいドキュメント翻訳の仕組みSphinxで作る貢献しやすいドキュメント翻訳の仕組み
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組みTakayuki Shimizukawa
 
Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015Takayuki Shimizukawa
 
Easy contributable internationalization process with Sphinx @ pyconmy2015
Easy contributable internationalization process with Sphinx @ pyconmy2015Easy contributable internationalization process with Sphinx @ pyconmy2015
Easy contributable internationalization process with Sphinx @ pyconmy2015Takayuki Shimizukawa
 

More from Takayuki Shimizukawa (20)

Navigating Python: Milestones from Essential Reads
Navigating Python: Milestones from Essential ReadsNavigating Python: Milestones from Essential Reads
Navigating Python: Milestones from Essential Reads
 
IKEv2-VPN PyHackCon2023
IKEv2-VPN PyHackCon2023IKEv2-VPN PyHackCon2023
IKEv2-VPN PyHackCon2023
 
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
 
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
 
『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由
 
エキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころエキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころ
 
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for DjangoRLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for Django
 
独学プログラマーのその後
独学プログラマーのその後独学プログラマーのその後
独学プログラマーのその後
 
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
 
Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018
 
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
 
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
 
素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い
 
世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015
 
JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介
 
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み
Sphinxで作る貢献しやすいドキュメント翻訳の仕組みSphinxで作る貢献しやすいドキュメント翻訳の仕組み
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み
 
Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015
 
Easy contributable internationalization process with Sphinx @ pyconmy2015
Easy contributable internationalization process with Sphinx @ pyconmy2015Easy contributable internationalization process with Sphinx @ pyconmy2015
Easy contributable internationalization process with Sphinx @ pyconmy2015
 

Recently uploaded

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 

Recently uploaded (9)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 

Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう

Editor's Notes

  1. I have been using Python since 2004 My main activities are as follows: Organizing Python communities in Japan: "Python mini Hack-a-thon", "Sphinx users JP" and "PyCon JP Association" non-profit organization. Working as an IT architect at BePROUD Inc in Japan. I also translate and write Python related books. For more information, please visit https://about.me/shimizukawa
  2. ある日レビュー依頼がきました。 差分は問題なさそうですが、ふと、差分とは関係ない別のことが気になりました。
  3. 差分のひとつにクエリのorder_by条件の変更があり、それ自体は問題無さそうです。 ここで私が気になったのは、このクエリがどういうSQLを実行しているか、です。 このクエリ、どんなSQLを実行していると思いますか?
  4. ちなみに、モデル定義はこんな感じ
  5. ちなみに、テンプレートはこんな感じです。
  6. 注目したのは、onlyの部分です。
  7. DB保存すると、トランザクションが競合してロールバックしちゃったり、DB容量を圧迫したり、パフォーマンスに影響を与えたりします。
  8. 弊社ビープラウドブースにて、見本を読めますので、ブースにもお立ち寄りください~
  9. 先ほどの例ではORMクエリをテンプレートに渡したことで、N+1が発生したので、代わりにデータクラスに詰め替える実装にしました。しかし今度はソースコードが複雑になって開発しづらくなってしまいました。 ビューの処理内にSQL発行を閉じ込めることで意図しないタイミングでのSQL発行を避ける方針は良いですが、実装の手間が増えてしまうのも考え物です。
  10. Djangoテンプレートのforループ処理やフィルター処理などに利用箇所が分散していることがあります。 また、クラスベースビューではベースとなるquerysetの用意とそこにクエリ条件を追加する処理が分かれていたり、Django REST Frameworkではさらにシリアライザの都合に合わせてselect_relatedやprefetch_relatedの用意が必要になったりします。
  11. Expert Python Programming, Fourth Edition's Target Audience are: Python developers who want to master Python in depth Python developers who use Python in their work Overview: This book covers the tools, techniques, and best practices that advanced Python programmers use in their work. Readers will learn advanced Python concepts and skills to create more efficient and high-quality Python code.
  12. Translation and writing works Since the first book in 2010, I have continued to translate and write as a side job while working on Python web applications. This year, my 13th book was published. Today I would like to share with you four books that mark milestones in my experience as a author and a translator. They are entitled, "Python books as milestones"