Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Duda con Query's Python DJango - REST Framework

Estas en el tema de Duda con Query's Python DJango - REST Framework en el foro de Python en Foros del Web. Hola buen día, estoy aprendiendo a usar Python - DJango y estoy usando DJANGO REST FRAMEWORK, en un ejemplo que está en la página, consume ...
  #1 (permalink)  
Antiguo 26/05/2013, 19:57
 
Fecha de Ingreso: diciembre-2010
Ubicación: México DF
Mensajes: 27
Antigüedad: 13 años, 3 meses
Puntos: 0
Pregunta Duda con Query's Python DJango - REST Framework

Hola buen día, estoy aprendiendo a usar Python - DJango y estoy usando DJANGO REST FRAMEWORK, en un ejemplo que está en la página, consume la información de una BD en SQLite3, lo que quiero hacer es mandar a llamar un STORE PROCEDURE pero eso es lo que no sé.
  #2 (permalink)  
Antiguo 26/05/2013, 20:12
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Duda con Query's Python DJango - REST Framework

En este blog te indican como. http://www.chrisumbel.com/article/dj...rocedures.aspx

No es nada complejo.

Si tu stored procedure no es muy complejo bien puedes hacer uso del ORM, incluso hacerle un método. Pero si realmente es complejo entonces no lo cambies.
  #3 (permalink)  
Antiguo 27/05/2013, 13:37
 
Fecha de Ingreso: diciembre-2010
Ubicación: México DF
Mensajes: 27
Antigüedad: 13 años, 3 meses
Puntos: 0
Exclamación Respuesta: Duda con Query's Python DJango - REST Framework

Muchas gracias por el aporte, muy bueno, la verdad es que no conozco mucho de Python-django pero ahí la llevo. Pude ejecutar mi Store pero tengo un problema al momento de pasarlo por REST Framework, me manda este error, espero me puedas ayudar.

DatabaseError at /

(-2147352567, 'Ocurri\xf3 una excepci\xf3n.', (0, u'Microsoft SQL Server Native Client 10.0', u"Invalid object name 'ws_queryexecution'.", None, 0, -2147217865), None)
Command:
SELECT [ws_queryexecution].[id], [ws_queryexecution].[nombre], [ws_queryexecution].[descripcion], [ws_queryexecution].[id_problema_padre] FROM [ws_queryexecution]
Parameters:
[]

Request Method: GET
Request URL: http://127.0.0.1:8000/
Django Version: 1.5.1
Exception Type: DatabaseError
Exception Value:

(-2147352567, 'Ocurri\xf3 una excepci\xf3n.', (0, u'Microsoft SQL Server Native Client 10.0', u"Invalid object name 'ws_queryexecution'.", None, 0, -2147217865), None)
Command:
SELECT [ws_queryexecution].[id], [ws_queryexecution].[nombre], [ws_queryexecution].[descripcion], [ws_queryexecution].[id_problema_padre] FROM [ws_queryexecution]
Parameters:
[]


Lo que veo es que trata de hacer un SELECT a la tabla ws_queryexecution pero por qué hace eso si ejecuto un SP y no existe como tal esa tabla. O solo que sea algo del REST Framework
  #4 (permalink)  
Antiguo 27/05/2013, 14:05
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Duda con Query's Python DJango - REST Framework

Necesito ver tu código para ayudarte, sin mas información es imposible decirte en que puede estar fallando.

No se que haga tu SP, pero si nada mas hace ese select es mejor si usas el ORM de django y te evitas complicaciones.

Si quieres probar otras alternativas te recomiendo tastiepie http://django-tastypie.readthedocs.org/en/latest/
  #5 (permalink)  
Antiguo 27/05/2013, 15:26
 
Fecha de Ingreso: diciembre-2010
Ubicación: México DF
Mensajes: 27
Antigüedad: 13 años, 3 meses
Puntos: 0
Pregunta Respuesta: Duda con Query's Python DJango - REST Framework

El SP de momento lo único que hace es un SELECT TOP 100 de una tabla X con los cuatro campos que son id, nombre, descripcion, id_problema_padre

Este es el archivo de models.py

Código Python:
Ver original
  1. from django.db import models
  2. from django.db import connection
  3.  
  4. class QueryExecution(models.Model):
  5.     #Initializate the SP fields name
  6.     nombre = models.CharField(max_length=150)
  7.     descripcion = models.TextField()
  8.     id_problema_padre = models.IntegerField()
  9.  
  10.     @staticmethod
  11.     def search(request):
  12.         cur = connection.cursor()
  13.         cur.callproc('todo_neg', request,)
  14.         results = cur.fetchall()
  15.         cur.close()
  16.  
  17.         return [QueryExecution(*row) for row in results]

Este es el views.py

Código Python:
Ver original
  1. from django.http import HttpResponse
  2. from django.views.decorators.csrf import csrf_exempt
  3. from rest_framework.renderers import JSONRenderer
  4. from rest_framework.parsers import JSONParser
  5. from ws.serializers import WSSerializer
  6. from models import QueryExecution
  7.  
  8. class JSONResponce(HttpResponse):
  9.  
  10.     def __init__(self, data, **kwargs):
  11.         content = JSONRenderer().render(data)
  12.         kwargs['content_type'] = 'application/json'
  13.         super(JSONResponce, self).__init__(content, **kwargs)
  14.  
  15. @csrf_exempt
  16. def ws_list(request):
  17.  
  18.     if request.method == 'GET':
  19.         QResult = QueryExecution.objects.all()
  20.         serializer = WSSerializer(QResult, many=True)
  21.         return JSONResponce(serializer.data)
  22.  
  23.     elif request.method == 'POST':
  24.         data = JSONParser().parse(request)
  25.         serializer = WSSerializer(data=data)
  26.         if serializer.is_valid():
  27.             serializer.save()
  28.             return JSONResponce(serializer.data, status=201)
  29.         else:
  30.             return JSONResponce(serializer.data, status=400)
  31.  
  32. @csrf_exempt
  33. def ws_detail(request, pk):
  34.     try:
  35.         ws = QueryExecution.objects.get(pk=pk)
  36.     except QueryExecution.DoesNotExist:
  37.         return HttpResponse(status=404)
  38.  
  39.     if request.method == 'GET':
  40.         serializer = WSSerializer(ws)
  41.         return JSONResponce(serializer.data)
  42.  
  43.     elif request.method == 'PUT':
  44.         data = JSONParser().parse(request)
  45.         serializer = WSSerializer(ws, data=data)
  46.         if serializer.is_valid():
  47.             serializer.save()
  48.             return JSONResponce(serializer.data)
  49.         else:
  50.             return JSONResponce(serializer.errors, status=400)
  51.  
  52.     elif request.method == 'DELETE':
  53.         ws.delete()
  54.         return HttpResponse(status=204)

Este es el serializers.py

Código Python:
Ver original
  1. from rest_framework import serializers
  2. from ws.models import QueryExecution
  3.  
  4. class WSSerializer(serializers.ModelSerializer):
  5.     class Meta:
  6.         model = QueryExecution
  7.         fields = ('id', 'nombre', 'descripcion', 'id_problema_padre')
  #6 (permalink)  
Antiguo 27/05/2013, 18:47
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Duda con Query's Python DJango - REST Framework

Ok ahora tiene mas sentido. Veo que tu app se llama ws y tu modelo QueryExecution, esto aclara muchas cosas.

1. No olvides hacer el syncdb.
2. Otra cosa checa que en tu db tengas creadas las tablas correspondientes.
3. Otra opción es probar con otra base de datos (por ejemplo sqlite3)
  #7 (permalink)  
Antiguo 28/05/2013, 09:00
 
Fecha de Ingreso: diciembre-2010
Ubicación: México DF
Mensajes: 27
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Duda con Query's Python DJango - REST Framework

Hice la ejecución del SP y ya sale, solo que ahora me manda este error:
AttributeError at /

'tuple' object has no attribute 'nombre'

Esto es para hacer el Serializer al momento de pasar el resultado del Query
  #8 (permalink)  
Antiguo 28/05/2013, 11:45
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Duda con Query's Python DJango - REST Framework

Lo que pasa es que en algún lugar, como no tengo el traceback no se exactamente donde.

Estas enviando una tupla cuando lo que espera recibir es una instancia de QueryExecutor.
  #9 (permalink)  
Antiguo 28/05/2013, 16:43
 
Fecha de Ingreso: diciembre-2010
Ubicación: México DF
Mensajes: 27
Antigüedad: 13 años, 3 meses
Puntos: 0
Sonrisa Respuesta: Duda con Query's Python DJango - REST Framework

Oye, crees que me puedas ayudar con un ejemplo de la ejecución de un query MySQL, SQL Server y pasarlo a REST Framework o TastyPie.

Ya probé Tasty y me está mandando el siguiente Error:

AttributeError at /

status_code


Lo que creo es que me estoy confundiendo al momento de querer ingresar los datos hacia los Frameworks ya que sí puedo hacer la consulta sin problemas y sí saco registros pero cuando los quiero pasar hacia el JSON me anda fallando.

Muchas gracias de antemano.
  #10 (permalink)  
Antiguo 28/05/2013, 17:47
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Duda con Query's Python DJango - REST Framework

Aquí tienes un ejemplo completamente funcional.

https://github.com/razpeitia/tastiepie-example

Si lo quieres pasar a MySQL o SQL Server solamente cambia la configuración de la base de datos, sincroniza la db y no olvides añadirle datos.

Etiquetas: django
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:45.