Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Django QuerySet "ARE" Patterns

Django QuerySet "ARE" Patterns

DjangoCongress JP 2019 Lightning Talk

0350fb935be160186cd72472c9e5543b?s=128

HayaoSuzuki

May 18, 2019
Tweet

Transcript

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

  2. おまえ誰よ • Hayao Suzuki @CardinalXaro • 株式会社アイリッジ ◦ Pythonエンジニア ◦

    テックリード(自称) • オライリージャパンの回し者 ◦ テクニカルレビュワー(自称)
  3. 今日のテーマ • Django QuerySetでやらかした思い出を語る。 • 本日、スマートフォンで作ったスライドなので手抜きです。 • この発表はフィクションであり、営業さんが客先で軟禁されたとか エンジニアが土日待機したなどの事実はありません。

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

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

  6. なんだこれは、たまげたなあ 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'
  7. こうした 'regist_dt__gte': datetime.datetime.combine(datetime.date.today(), datetime.time.min), 'regist_dt__lte': datetime.datetime.combine(datetime.date.today(), datetime.time.max),

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

    23:59:59.999999
  9. 結論 • 実行計画調べよう • SQL見よう • LT資料は事前に準備しよう