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

DjangoのORMを触るあるSQLおじさんの悩み

 DjangoのORMを触るあるSQLおじさんの悩み

Chihiro Kaneko

June 30, 2018
Tweet

Other Decks in Programming

Transcript

  1. たとえば・・・ このSQLをDjangoのORMで表現するには? (これはまだ簡単な例ですが・・・) SELECT hero.name, category.name AS category_name FROM hero

    INNER JOIN category ON ( hero.category_id = category.id ) WHERE category.name = 'spam' UNION SELECT villain.name, category.name AS category_name FROM villain INNER JOIN category ON ( villain.category_id = category.id ) WHERE category.name = 'egg'
  2. これを読んだらどうなった? >>> from django.db.models import F >>> from entities.models import

    Hero, Villain >>> q1 = Hero.objects.annotate( ... category_name=F('category__name'), ... ) >>> q1 = q1.values('name', 'category_name') >>> q1 = q1.filter(category_name='spam') >>> q2 = Villain.objects.annotate( ... category_name=F('category__name'), ... ) >>> q2 = q2.values('name', 'category_name') >>> q2 = q2.filter(category_name='egg') >>> q1.union(q2) あ!! これDjango ORM Cookbookで読んだやつだ!!