On 2014-09-23 16:29, Marco De Paoli wrote:

Pippo.objects.exclude(Q(alias__isnull=True) | Q(alias__exact=''))

devo ammettere che a volte anche a me risulterebbe piĆ¹ immediato scrivere:

SELECT * FROM app_pippo WHERE alias IS NOT NULL AND alias != ''

(per non parlare dei casi di join!)

Esatto: appena la query diventa un po' meno sui binari l'autore dell'orm comincia a tirarti dietro tutte le feature del mondo per far vedere che puoi usare il suo programma in tutti i casi possibili, ma poi se devi a imparare quelle e a combinarle tra loro, non e' meglio direttamente scrivere l'SQL? Da questo punto di vista trovo comodissimo Manager.raw:

    Pippo.object.raw("""
        select p.* from pippo
JOIN WHERE FILTER SET-RETURNING-FUNCTIONS RECURSIVE-COMMON-TABLE-EXPRESSION
        limit 42""")

che ti tira fuori i model a partire da qualunque cosa sei capace di tirare al database, in caso la tua query produca oggetti. Che resta un sottoinsieme limitato delle query possibili ("select nome, count(*) from pippo group by 1" non produce pippi).

-- Daniele

P.S. SELECT * FROM app_pippo WHERE coalesce(alias, '') != '' - altra cosa che vagliela a spiegare, a django...

_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Reply via email to