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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

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

Avatar for Chihiro Kaneko

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で読んだやつだ!!