Slide 1

Slide 1 text

明日から使うな! Django QuerySet アレパターン Hayao Suzuki @CardinalXaro

Slide 2

Slide 2 text

おまえ誰よ ● Hayao Suzuki @CardinalXaro ● 株式会社アイリッジ ○ Pythonエンジニア ○ テックリード(自称) ● オライリージャパンの回し者 ○ テクニカルレビュワー(自称)

Slide 3

Slide 3 text

今日のテーマ ● Django QuerySetでやらかした思い出を語る。 ● 本日、スマートフォンで作ったスライドなので手抜きです。 ● この発表はフィクションであり、営業さんが客先で軟禁されたとか エンジニアが土日待機したなどの事実はありません。

Slide 4

Slide 4 text

indexを張らずにDBがスパイクした ● token = models.TextField(max_length=200) ● token = models.CharField(max_length=200, db_index=True)

Slide 5

Slide 5 text

年月日で調べたい 'regist_dt__year': today.year, 'regist_dt__month': today.month, 'regist_dt__day': today.day

Slide 6

Slide 6 text

なんだこれは、たまげたなあ WHERE (EXTRACT(DAY FROM `regist_dt`) = 28 AND EXTRACT(MONTH FROM `regist_dt`) = 1 AND `regist_dt` BETWEEN '2019-01-01 00:00:00' AND '2019-12-31 23:59:59.999999'

Slide 7

Slide 7 text

こうした 'regist_dt__gte': datetime.datetime.combine(datetime.date.today(), datetime.time.min), 'regist_dt__lte': datetime.datetime.combine(datetime.date.today(), datetime.time.max),

Slide 8

Slide 8 text

そうそうこれだよ WHERE (`regist_dt` >= 2019-01-28 00:00:00 AND `regist_dt` <= 2019-01-28 23:59:59.999999

Slide 9

Slide 9 text

結論 ● 実行計画調べよう ● SQL見よう ● LT資料は事前に準備しよう