Foros del Web » Programando para Internet » Python »

controlar error cuando consulta sql no trae valor

Estas en el tema de controlar error cuando consulta sql no trae valor en el foro de Python en Foros del Web. Saludos camaradas. Estoy desarroolnado un pequeño programa y me quedé atascado con un tema: el codigo el el siguiente: Código: maximo = int(conexion.consulta ("select max(id_category) ...
  #1 (permalink)  
Antiguo 27/10/2011, 04:39
Avatar de wolvelopez  
Fecha de Ingreso: junio-2008
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 0
controlar error cuando consulta sql no trae valor

Saludos camaradas.
Estoy desarroolnado un pequeño programa y me quedé atascado con un tema:

el codigo el el siguiente:
Código:
maximo = int(conexion.consulta ("select max(id_category) from ps_category_lang")[0][0] + 1)
El problema me surge cuando la tabla de la que intenta extraer el valor no tiene ningun valor y entonces me provoca un error al intentar hacer la suma de un entero que no existe. ¿Cómo podria controlar esto?...Cada para de dias la Bade de datos de queda vacia y es cuando me surge el error.

El error es:
maximo = int(conexion.consulta ("select max(id_category) from ps_category_lang")[0][0] + 1)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'


Muchas gracias de antemano por su ayuda.
  #2 (permalink)  
Antiguo 27/10/2011, 07:16
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: controlar error cuando consulta sql no trae valor

Realmente deberías hacer control de errores en cada etapa, de lo contrario algún día fallará por otro motivo y no podrás encontrar el error.

Pero bueno, para tu pregunta concreta, y siguiendo la filosofía de Python de "es más fácil pedir perdón que pedir permiso", podrías solucionarlo fácilmente capturando la excepción:

Código Python:
Ver original
  1. try:
  2.     maximo = int(conexion.consulta ("select max(id_category) from ps_category_lang")[0][0] + 1)
  3. except TypeError:
  4.     print 'No se pudo hacer la suma!'


Saludos.
  #3 (permalink)  
Antiguo 28/10/2011, 03:46
Avatar de wolvelopez  
Fecha de Ingreso: junio-2008
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: controlar error cuando consulta sql no trae valor

Muchas gracias compañero.
La solucuon me vale, aunque me gustaria saber como puedo hacer para que en el caso de que la tabla este vacia yo pueda asignarle a una variable el valor 1.
No se si se puede hacer eso dentro del except TypeError asi:

Código:
try:
        maximo = int(conexion.consulta ("select max(id_category) from ps_category_lang")[0][0] + 1)
    except TypeError:
        print 'No se pudo hacer la suma!'
        maximo = 1
Gracias.
  #4 (permalink)  
Antiguo 28/10/2011, 07:47
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: controlar error cuando consulta sql no trae valor

Sí se puede hacer así. También lo podés hacer desde el SQL. No sé qué base de datos estés usando, pero en Oracle sería con la función NVL:

SELECT NVL(MAX(id_category), 0) FROM ps_categoria

Creo que en MS SQL y mySQL existe la función ISNULL que hace lo mismo, revisá la documentación.
Ya que estás, podés hacer algo como esto:

SELECT NVL(MAX(id_category), 0) + 1 FROM ps_categoria

y ahorrarte la suma en Python.

Ahora, ¿no sería mejor un campo autoincremental (o una secuencia si estás en Oracle)?


Saludos.

Etiquetas: controlar, sql
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 20:16.