Raw query set

153 views
Skip to first unread message

Javier Ramirez

unread,
Nov 8, 2013, 7:21:08 PM11/8/13
to djan...@googlegroups.com
Buenas a todos:

Tengo una duda en Django, resulta que me he metido en el tema de raw query en la documentacion de django, me dice que la sentencia por ejempo de un select es con el Tabla.objects.raw(sentencia) pero resulta que sale un error de len() como que una sentencia no coge los datos de la bd. He visto en google que algunos para solucionar eso ponen el import de Rawqueryset y algunos hacen una conexion por cursor. con el import coneccion.

En la documentación no lo pone como necesario, pero ¿para evitar ese error, es necesario ponerlo? ¿Alguien usa el este sistema de "raw"?

Este es mi views.py

  1. 	lista_noti = Articulo.objects.raw('Select * from Articulo where (Categoria = Noticias)')
  2. 	paginator = Paginator(lista_noti,4)
  3. 	try:
  4. 		page = int(pagina)
  5. 	except:
  6. 		page = 1
  7. 	try:
  1. 		res_noticia = paginator.page(page)
    ...
  1. 	except(EmptyPage, InvalidPage):
  2. 		res_noticia = paginator.page(paginator.num_pages)
  3. 	ctx = {'noticias':res_noticia}
  4. 	return render_to_response('home/noticias.html',ctx,context_instance=RequestContext(request))

Este es mi error

object of type 'RawQuerySet' has no len()

Charly Román

unread,
Nov 8, 2013, 7:28:12 PM11/8/13
to djan...@googlegroups.com
Prueba con

res_noticia = paginator.page(list(page))

Pero tu ejemplo es innecesario que lo hagas con una sql raw, por ejemplo:

Articulo.objects.filter(categoria=categoria)

El día 8 de noviembre de 2013 18:21, Javier Ramirez
<elbom...@gmail.com> escribió:
> --
> --
> Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios del
> Framework Django de habla hispana" de Grupos de Google.
> Si quieres publicar en este grupo, envía un mensaje de correo
> electrónico a djan...@googlegroups.com
> Para anular la suscripción a este grupo, envíe un mensaje a
> django-es-...@googlegroups.com
> Para obtener más opciones, visita este grupo en
> http://groups.google.com.bo/group/django-es.
> ---
> Has recibido este mensaje porque estás suscrito al grupo "Django-es" de
> Grupos de Google.
> Para anular la suscripción a este grupo y dejar de recibir sus correos
> electrónicos, envía un correo electrónico a
> django-es+...@googlegroups.com.
> Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

javier

unread,
Nov 8, 2013, 7:59:09 PM11/8/13
to djan...@googlegroups.com
Gracias probare
Estaba viendo como era el query raw me pico la curiosidad
El categorias viene de un Many to many de una clase Categorias

El 09/11/13 00:28, Charly Rom�n escribi�:
> Prueba con
>
> res_noticia = paginator.page(list(page))
>
> Pero tu ejemplo es innecesario que lo hagas con una sql raw, por ejemplo:
>
> Articulo.objects.filter(categoria=categoria)
>
> El d�a 8 de noviembre de 2013 18:21, Javier Ramirez
> <elbom...@gmail.com> escribi�:
>> Buenas a todos:
>>
>> Tengo una duda en Django, resulta que me he metido en el tema de raw query
>> en la documentacion de django, me dice que la sentencia por ejempo de un
>> select es con el Tabla.objects.raw(sentencia) pero resulta que sale un error
>> de len() como que una sentencia no coge los datos de la bd. He visto en
>> google que algunos para solucionar eso ponen el import de Rawqueryset y
>> algunos hacen una conexion por cursor. con el import coneccion.
>>
>> En la documentaci�n no lo pone como necesario, pero �para evitar ese error,
>> es necesario ponerlo? �Alguien usa el este sistema de "raw"?
>>
>> Este es mi views.py
>>
>> lista_noti = Articulo.objects.raw('Select * from Articulo where (Categoria
>> = Noticias)')
>>
>> paginator = Paginator(lista_noti,4)
>>
>> try:
>>
>> page = int(pagina)
>>
>> except:
>>
>> page = 1
>>
>> try:
>>
>> res_noticia = paginator.page(page)
>>
>> ...
>>
>> except(EmptyPage, InvalidPage):
>>
>> res_noticia = paginator.page(paginator.num_pages)
>>
>> ctx = {'noticias':res_noticia}
>>
>> return
>> render_to_response('home/noticias.html',ctx,context_instance=RequestContext(request))
>>
>>
>> Este es mi error
>>
>> object of type 'RawQuerySet' has no len()
>>
>> --
>> --
>> Ha recibido este mensaje porque est� suscrito a Grupo "Grupo de Usuarios del
>> Framework Django de habla hispana" de Grupos de Google.
>> Si quieres publicar en este grupo, env�a un mensaje de correo
>> electr�nico a djan...@googlegroups.com
>> Para anular la suscripci�n a este grupo, env�e un mensaje a
>> django-es-...@googlegroups.com
>> Para obtener m�s opciones, visita este grupo en
>> http://groups.google.com.bo/group/django-es.
>> ---
>> Has recibido este mensaje porque est�s suscrito al grupo "Django-es" de
>> Grupos de Google.
>> Para anular la suscripci�n a este grupo y dejar de recibir sus correos
>> electr�nicos, env�a un correo electr�nico a
>> django-es+...@googlegroups.com.
>> Para obtener m�s opciones, visita https://groups.google.com/groups/opt_out.

javier

unread,
Nov 8, 2013, 8:01:57 PM11/8/13
to djan...@googlegroups.com
esto es lo que pasa despues de probar con list
int' object is not iterable

Este ejemplo me servia en otros proyectos no se porque no va en este y esta igual.

El 09/11/13 00:28, Charly Román escribió:

Charly Román

unread,
Nov 8, 2013, 8:03:18 PM11/8/13
to djan...@googlegroups.com
Igual, no es necesario el raw :)

El día 8 de noviembre de 2013 18:59, javier <elbom...@gmail.com> escribió:
> Gracias probare
> Estaba viendo como era el query raw me pico la curiosidad
> El categorias viene de un Many to many de una clase Categorias
>
> El 09/11/13 00:28, Charly Román escribió:
>
>> Prueba con
>>
>> res_noticia = paginator.page(list(page))
>>
>> Pero tu ejemplo es innecesario que lo hagas con una sql raw, por ejemplo:
>>
>> Articulo.objects.filter(categoria=categoria)
>>
>> El día 8 de noviembre de 2013 18:21, Javier Ramirez
>> <elbom...@gmail.com> escribió:
>>>
>>> Buenas a todos:
>>>
>>> Tengo una duda en Django, resulta que me he metido en el tema de raw
>>> query
>>> en la documentacion de django, me dice que la sentencia por ejempo de un
>>> select es con el Tabla.objects.raw(sentencia) pero resulta que sale un
>>> error
>>> de len() como que una sentencia no coge los datos de la bd. He visto en
>>> google que algunos para solucionar eso ponen el import de Rawqueryset y
>>> algunos hacen una conexion por cursor. con el import coneccion.
>>>
>>> En la documentación no lo pone como necesario, pero ¿para evitar ese
>>> error,
>>> es necesario ponerlo? ¿Alguien usa el este sistema de "raw"?
>>>
>>> Este es mi views.py
>>>
>>> lista_noti = Articulo.objects.raw('Select * from Articulo where
>>> (Categoria
>>> = Noticias)')
>>>
>>> paginator = Paginator(lista_noti,4)
>>>
>>> try:
>>>
>>> page = int(pagina)
>>>
>>> except:
>>>
>>> page = 1
>>>
>>> try:
>>>
>>> res_noticia = paginator.page(page)
>>>
>>> ...
>>>
>>> except(EmptyPage, InvalidPage):
>>>
>>> res_noticia = paginator.page(paginator.num_pages)
>>>
>>> ctx = {'noticias':res_noticia}
>>>
>>> return
>>>
>>> render_to_response('home/noticias.html',ctx,context_instance=RequestContext(request))
>>>
>>>
>>> Este es mi error
>>>
>>> object of type 'RawQuerySet' has no len()
>>>
>>> --
>>> --
>>> Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios
>>> del
>>> Framework Django de habla hispana" de Grupos de Google.
>>> Si quieres publicar en este grupo, envía un mensaje de correo
>>> electrónico a djan...@googlegroups.com
>>> Para anular la suscripción a este grupo, envíe un mensaje a
>>> django-es-...@googlegroups.com
>>> Para obtener más opciones, visita este grupo en
>>> http://groups.google.com.bo/group/django-es.
>>> ---
>>> Has recibido este mensaje porque estás suscrito al grupo "Django-es" de
>>> Grupos de Google.
>>> Para anular la suscripción a este grupo y dejar de recibir sus correos
>>> electrónicos, envía un correo electrónico a
>>> django-es+...@googlegroups.com.
>>> Para obtener más opciones, visita
>>> https://groups.google.com/groups/opt_out.
>
>
> --
> --
> Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios del
> Framework Django de habla hispana" de Grupos de Google.
> Si quieres publicar en este grupo, envía un mensaje de correo electrónico a
> djan...@googlegroups.com
> Para anular la suscripción a este grupo, envíe un mensaje a
> django-es-...@googlegroups.com
> Para obtener más opciones, visita este grupo en
> http://groups.google.com.bo/group/django-es.
> --- Has recibido este mensaje porque estás suscrito al grupo "Django-es" de
> Grupos de Google.

Charly Román

unread,
Nov 8, 2013, 8:04:24 PM11/8/13
to djan...@googlegroups.com
Creo que esa no es la línea del error. Pon el traceback.

El día 8 de noviembre de 2013 19:03, Charly Román
<chack...@gmail.com> escribió:

javier

unread,
Nov 8, 2013, 8:11:41 PM11/8/13
to djan...@googlegroups.com

TypeError at /noticias/page/1/

'int' object is not iterable
Request Method: GET
Request URL: http://misionevangelismo.alwaysdata.net/noticias/page/1/
Django Version: 1.5.1
Exception Type: TypeError
Exception Value:
'int' object is not iterable
Exception Location: /home/misionevangelismo/webiglesia/webiglesia/apps/home/views.py in noticias_view, line 33
Python Executable: /usr/languages/python/2.6/bin/python
Python Version: 2.6.6
Python Path:
['/home/misionevangelismo',
 '/home/misionevangelismo/webiglesia',
 '/home/misionevangelismo/webiglesia/public',
 '/usr/local/lib/python2.6/site-packages/pip-0.4-py2.6.egg',
 '/usr/local/lib/python2.6/site-packages/Paste-1.6-py2.6.egg',
 '/usr/local/lib/python2.6/site-packages/trac-0.10.5-py2.6.egg',
 '/usr/local/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg',
 '/usr/local/lib/python2.6/site-packages/lamson-1.0-py2.6.egg',
 '/usr/local/lib/python2.6/site-packages/python_daemon-1.5.5-py2.6.egg',
 '/usr/local/lib/python2.6/site-packages/mock-0.7.0b2-py2.6.egg',
 '/usr/local/lib/python2.6/site-packages/lockfile-0.8-py2.6.egg',
 '/home/misionevangelismo/webiglesia/public',
 '/usr/local/alwaysdata/python/django/1.5.1',
 '/usr/languages/python/2.6/lib/python26.zip',
 '/usr/languages/python/2.6/lib/python2.6',
 '/usr/languages/python/2.6/lib/python2.6/plat-linux2',
 '/usr/languages/python/2.6/lib/python2.6/lib-tk',
 '/usr/languages/python/2.6/lib/python2.6/lib-old',
 '/usr/languages/python/2.6/lib/python2.6/lib-dynload',
 '/usr/languages/python/2.6/lib/python2.6/site-packages',
 '/usr/local/lib/python2.6/site-packages',
 '/usr/local/lib/python2.6/site-packages/PIL',
 '/usr/lib/python2.6/site-packages']

Traceback:
File "/usr/local/alwaysdata/python/django/1.5.1/django/core/handlers/base.py" in get_response
  115.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/misionevangelismo/webiglesia/webiglesia/apps/home/views.py" in noticias_view
  33. 		res_noticia = paginator.page(page)

Exception Type: TypeError at /noticias/page/1/
Exception Value: 'int' object is not iterable

El 09/11/13 01:04, Charly Román escribió:

Charly Román

unread,
Nov 8, 2013, 8:15:06 PM11/8/13
to djan...@googlegroups.com
litsa_noti es la que debería ser convertida a lista primero.

javier

unread,
Nov 8, 2013, 8:24:13 PM11/8/13
to djan...@googlegroups.com
Charly con el filter como se puede crear un filtro secundario es decir uno dentro de otro, quiero probar algo
El 09/11/13 01:15, Charly Román escribió:

Charly Román

unread,
Nov 8, 2013, 8:37:11 PM11/8/13
to djan...@googlegroups.com
Si, puedes hacer un AND por ejemplo así:

Modelo.objects.filter(campo1=1, campo2=2)
 

javier

unread,
Nov 8, 2013, 8:43:04 PM11/8/13
to djan...@googlegroups.com

Estoy tratando de sacar de articulo de la categoria noticias

class Categorias(models.Model):

        cat_articulo = models.CharField(max_length=15)

        def __unicode__(self):
                return self.cat_articulo
        class Meta:
                ordering = ('cat_articulo',)

class Articulo(models.Model):

        def url(self, filename):

                ruta ="MultimediaData/Users/%s/%s" %(self.user.username, filename)
                return ruta

        titulo = models.CharField(max_length=100)
        descripcion = models.TextField()
        fecha = models.DateField()
        resumen = models.CharField(max_length=600)
        imagen = models.ImageField(upload_to=url, null = True, blank = True)
        categoria = models.ManyToManyField(Categorias)

        def __unicode__(self):
                return self.titulo
        class Meta:
                ordering = ('titulo',)

El 09/11/13 01:37, Charly Román escribió:

Charly Román

unread,
Nov 8, 2013, 8:46:03 PM11/8/13
to djan...@googlegroups.com
¿Algo como esto?

categoria = Categoria.objects,get(cat_articulo="Noticias")
articulos = categoria.articulo_set.all()

javier

unread,
Nov 8, 2013, 8:51:16 PM11/8/13
to djan...@googlegroups.com
Yuosss, me olvide completamente del get, a las 1:50 am
¿Que hace el .campo_set?

El 09/11/13 01:46, Charly Román escribió:

Charly Román

unread,
Nov 8, 2013, 8:53:21 PM11/8/13
to djan...@googlegroups.com

javier

unread,
Nov 8, 2013, 8:55:35 PM11/8/13
to djan...@googlegroups.com
ok visto, gracias por la info.

El 09/11/13 01:53, Charly Román escribió:
Reply all
Reply to author
Forward
0 new messages