Tuesday, February 21, 2017

Re: combining ORM and raw SQL in same query

Thanks. I did not know about those.


On Tue, Feb 21, 2017 at 9:24 AM, Matthew Pava <Matthew.Pava@iss.com> wrote:
> I would use Case and When and other Func objects.
> https://docs.djangoproject.com/en/1.10/ref/models/conditional-expressions/
> That way we don't have to depend on raw SQL.
>
> -----Original Message-----
> From: django-users@googlegroups.com [mailto:django-users@googlegroups.com] On Behalf Of Larry Martell
> Sent: Monday, February 20, 2017 3:00 PM
> To: django-users@googlegroups.com
> Subject: Re: combining ORM and raw SQL in same query
>
> Thanks!
>
>
> On Mon, Feb 20, 2017 at 10:52 AM, m1chael <mykhul@gmail.com> wrote:
>> i did something like this recently using .extra / select
>>
>> https://docs.djangoproject.com/en/1.10/ref/models/querysets/#extra
>>
>>
>>
>> On Mon, Feb 20, 2017 at 10:49 AM, Larry Martell
>> <larry.martell@gmail.com>
>> wrote:
>>>
>>> Is there any way to use both the ORM and raw SQL in the same query?
>>>
>>> I have an existing app that uses the ORM and now I have a need to add
>>> SQL like this to the select:
>>>
>>> (CASE
>>> WHEN TRIM(IFNULL(roiname, '')) IN ('', 'None') THEN CONCAT_WS('.',
>>> roi_type_id, roi_id)
>>> WHEN CONCAT_WS('.', roi_type_id, roi_id) = roiname THEN roiname
>>> ELSE CONCAT_WS('.', roi_type_id, roi_id, roiname)
>>> END) as roiname
>>>
>>> and SQL like this to the where:
>>>
>>> AND (CASE
>>> WHEN TRIM(IFNULL(roiname, '')) IN ('', 'None') THEN CONCAT_WS('.',
>>> roi_type_id, roi_id)
>>> WHEN CONCAT_WS('.', roi_type_id, roi_id) = roiname THEN roiname
>>> ELSE CONCAT_WS('.', roi_type_id, roi_id, roiname)
>>> END) REGEXP 'foo'
>>>
>>> As far as I know I cannot do anything like that with the ORM. I don't
>>> want to have to rewrite everything with raw SQL. Is there a way to
>>> mix them?

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CACwCsY4N2HTf9g4Ayed_pKWaNQ94pv0q1HpoFH3p7kD0h4au5A%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment