Foros del Web » Programando para Internet » Python »

Error 'int' object does not supporting...

Estas en el tema de Error 'int' object does not supporting... en el foro de Python en Foros del Web. Buenos dias, tengo un problema con Python, Lo que pretendo hacer es algo muy sencillo... Aceptar un número en la consola buscar en una tabla ...
  #1 (permalink)  
Antiguo 11/06/2012, 03:11
 
Fecha de Ingreso: diciembre-2010
Ubicación: Mallorca
Mensajes: 139
Antigüedad: 14 años
Puntos: 3
Error 'int' object does not supporting...

Buenos dias, tengo un problema con Python,

Lo que pretendo hacer es algo muy sencillo...

Aceptar un número en la consola
buscar en una tabla un registro con este número
si lo encuentra
sumar 1 a un contador
actualizar
si no lo encuentra
grabar un nuevo registro

el campo de la base de datos que debe recibir el número es integer.

El error que me da es en el momento de hacer el Select y me pone
'int' object does not supporting indexing

El código escrito que tengo es:

Código python:
Ver original
  1. def actualizar_numero(numero_entrada):
  2.     try:  
  3.         cur=cn.cursor()
  4.        
  5.         SQL = """SELECT * FROM tbl_numeros WHERE numero = %s"""
  6.         data = (numero_entrada)
  7.         cur.execute(SQL, data)
  8.        
  9.         filas = cur.fetchone() #selecciona en fila el registro que cumple la condicion
  10.         if filas:
  11.             numero_id, numero, veces = filas # extraer los campos
  12.             veces = veces + 1
  13.             update_numero(numero_id, veces)        
  14.         else:
  15.             #print "no encontrado registro en la tabla tbl_numeros"
  16.             insertar_numero(numero_entrada)
  17.         cur.close()
  18.     except Exception, e:
  19.         cur.close()
  20.         print "select erroneo en la tabla tbl_numero", e
  21. #
  22. def update_numero(numero_id, veces):
  23.     try:
  24.         cur = cn.cursor()
  25.         SQL = """UPDATE tbl_numeros
  26.                    SET veces = %s
  27.                    WHERE numero_id = %s"""
  28.         data = (veces, numero_id)
  29.         cur.execute(SQL, data)
  30.     except Exception, e:
  31.         print "Error en update tabla tbl_numeros", e
  32.         cur.close()
  33. #
  34. def insertar_numero(numero_entrada):
  35.     try:
  36.         cur=cn.cursor()
  37.         SQL = """INSERT INTO tbl_numeros (numero, veces)  
  38.            VALUES (%s,%s);"""
  39.         data = (numero_entrada, 1)
  40.         cur.execute(SQL, data)
  41.     except Exception, e:
  42.         print "mal insert en tabla tbl_numeros", e
  43.         cur.close()
  44.        
  45. ##################################################
  46. #               Inicio
  47. ##################################################
  48.  
  49.  
  50. import psycopg2
  51. global cn
  52.  
  53. #conexion a la base de datos
  54. cn = psycopg2.connect("host=localhost dbname=frx_senyales_precision_H user=postgres password=*******")
  55.  
  56. numero_entrada = int(raw_input("Dame un numero: "))            
  57.  
  58. actualizar_numero(numero_entrada)
  59. cn.commit()
  60. print "fin proceso..."



Utilizo Python, Psycopg2 y Postgresql

¿alguien puede aclararme que pasa?.

Gracias

Última edición por AlvaroG; 11/06/2012 a las 07:43 Razón: arreglar coloreado de código
  #2 (permalink)  
Antiguo 11/06/2012, 07:51
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Error 'int' object does not supporting...

Acabas de caer en una de las cosas más molestas y difíciles de ver en Python: Si pones un solo valor en una tupla (por ejemplo: (2)), la tupla no se crea.

Es decir, (2) no es una tupla de un elemento, sino simplemente el entero 2.

Para forzar a que la tupla se cree, se debe escribir como (2,), con la coma antes del ), como si fueses a escribir un segundo valor.

Cambia
Código Python:
Ver original
  1. data = (numero_entrada)
por
Código Python:
Ver original
  1. data = (numero_entrada,)

y recordá siempre escribir la coma cuando quieras crear una tupla de un solo elemento.

La raíz del error está en la sustitución de %s, ya que internamente se intenta acceder al primer elemento de la tupla de valores. Como no le estás dando una tupla sino un entero, intenta hacer algo como 2[0] lo cual es claramente erróneo.


Saludos.
  #3 (permalink)  
Antiguo 11/06/2012, 07:53
 
Fecha de Ingreso: diciembre-2010
Ubicación: Mallorca
Mensajes: 139
Antigüedad: 14 años
Puntos: 3
Respuesta: Error 'int' object does not supporting...

Muchísimas gracias Alvaro, voy a probar...

Etiquetas: gui, int, object
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 06:38.