[Python-es] Busqueda compleja en BD
Eduardo Matus
ematus en gmail.com
Jue Jun 28 17:08:52 CEST 2012
lo que "raw" retorna es lo mismo que un queryset, y el uso de Q con "raw"
es solo sql normal..
resultados = Modelo.objects.raw("select * from foo where Modelo like
'opcion1' or Modelo like 'opcion2' ")
Parece que no tienes experiencia con SQL, te recomiendo aprender SQL antes
de usar un ORM esto porque cuando quieras hacer consultas complejas el ORM
de django no da para mas.
2012/6/28 gabriel fernandez <gabofer82 en gmail.com>
> Ok, pero yo quiero hacer un queryset, por eso uso Q, porque la consulta
> evalua muchas opciones, no se si las formas son excluyentes, como seria
> raw en una consulta con Q?
>
> El 28 de junio de 2012 11:51, Eduardo Matus <ematus en gmail.com> escribió:
>
> Tambien esta "raw"
>>
>> resultados = Modelo.objects.raw("select * from foo")
>>
>> lo que hace es que mapea las columnas a los campos del modelo, como si
>> fuera objetos POCO.
>>
>>
>> 2012/6/28 Manuel Ignacio Franco Galeano <maigfrga en gmail.com>
>>
>>> tambien esta la opcion de hacer con sql
>>> https://docs.djangoproject.com/en/dev/topics/db/sql/
>>>
>>>
>>>
>>> def my_custom_sql():
>>> from django.db import connection, transaction
>>> cursor = connection.cursor()
>>>
>>> # Data modifying operation - commit required
>>> cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])
>>> transaction.commit_unless_managed()
>>>
>>> # Data retrieval operation - no commit required
>>> cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
>>> row = cursor.fetchone()
>>>
>>> return row
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> El 28 de junio de 2012 16:39, Eduardo Matus <ematus en gmail.com> escribió:
>>>
>>> primero que nada, esto no es una "consulta compleja".
>>>> if seleccion == 'todo':
>>>> qset = ( Q(Modelo__contains='opcion1') |
>>>> Q(Modelo__contains='opcion2'))
>>>>
>>>> 2012/6/28 gabriel fernandez <gabofer82 en gmail.com>
>>>>
>>>>> Hola Lista!!!
>>>>>
>>>>> Agradezco a quién me pueda dar una mano!
>>>>>
>>>>> El problema es como sigue:
>>>>>
>>>>> Tengo una busqueda en la cual uso tres radio button:
>>>>>
>>>>> Opcion 1 Opcion 2 Opcion 1-2(Ambas)
>>>>>
>>>>> En la vista cuando voy a procesar el formulario tengo algo asi (luego
>>>>> de validar):
>>>>>
>>>>> seleccion = form.cleaned_data['opciones']
>>>>> qset = (
>>>>> Q(Modelo__contains=seleccion)
>>>>> )
>>>>>
>>>>> El problema consiste en como hacer cuando se selecciona la Opcion 1-2
>>>>> ya que engloba
>>>>> las dos opciones anteriores, hay algo que indique que quiero todo algo
>>>>> tipo:
>>>>>
>>>>> qset = (
>>>>> Q(Modelo__contains='todo')
>>>>> )
>>>>>
>>>>> Uso el modulo Q para consultas complejas porque en realidad tengo mas
>>>>> de una seleccion
>>>>> como la anterior. Muestro una solamente porque el resto son iguales, y
>>>>> van tambien en la misma
>>>>> tupla de qset.
>>>>>
>>>>> Espero ser claro.
>>>>>
>>>>> Quedo a la espera de sus opiniones y ayuda. Muchas gracias!
>>>>> --
>>>>> Gabriel Fernández
>>>>> Desrrollador Web
>>>>> www.openweb.com.uy
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Python-es mailing list
>>>>> Python-es en python.org
>>>>> http://mail.python.org/mailman/listinfo/python-es
>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Eduardo Matus Coquelet
>>>> Ingeniero Civil Informático y Telecomunicaciones.
>>>> Celular: 77113825
>>>>
>>>> _______________________________________________
>>>> Python-es mailing list
>>>> Python-es en python.org
>>>> http://mail.python.org/mailman/listinfo/python-es
>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Python-es mailing list
>>> Python-es en python.org
>>> http://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>>>
>>
>>
>> --
>> Eduardo Matus Coquelet
>> Ingeniero Civil Informático y Telecomunicaciones.
>> Celular: 77113825
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> http://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
>
>
> --
> Gabriel Fernández
> Desrrollador Web
> www.openweb.com.uy
>
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
--
Eduardo Matus Coquelet
Ingeniero Civil Informático y Telecomunicaciones.
Celular: 77113825
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20120628/5eaee7fb/attachment.html>
Más información sobre la lista de distribución Python-es