Foros del Web » Programando para Internet » Python »

Parrafo de Python con problemas

Estas en el tema de Parrafo de Python con problemas en el foro de Python en Foros del Web. Tengo un problema... tanto el Select como el Insert que hay en este párrafo, me funcionan correctamente cuando están individualmente sin el Try y el ...
  #1 (permalink)  
Antiguo 24/12/2010, 10:35
 
Fecha de Ingreso: diciembre-2010
Ubicación: Mallorca
Mensajes: 139
Antigüedad: 13 años, 4 meses
Puntos: 3
Parrafo de Python con problemas

Tengo un problema... tanto el Select como el Insert que hay en este párrafo, me funcionan correctamente cuando están individualmente sin el Try y el Except, pero cuando los junto el Select me dice que encuentra registro cuando realmente no existe... ¿puede alguien ayudarme?.


import psycopg2
cn = psycopg2.connect("host=localhost dbname=my_db user=postgres password=xxxxxx")
cur = cn.cursor()
relacio = 33123211122202211212112221112112111113221321222212 3121111111
#
#si no existe se inserta nuevo registro y si existe pasa ya que esta registrado
#
try:
#seleccionar registro
cur.execute("SELECT * from tabla_pendientes WHERE sesentapendientes = '%s'" %(relacio))
print "encontrado"
for fila in cur:
sesentapendientes = fila
print sesentapendientes
except:
print "no encuentra el registro, inserta nuevo"
cur.execute("INSERT INTO tabla_pendientes (sesentapendientes) VALUES (%s)", [relacio])
cn.commit()


OJO, la indentacion es correcta, lo que pasa es que al copiarla aquí no la mantiene correctamente y no sé como hacerlo.

Gracias.
  #2 (permalink)  
Antiguo 24/12/2010, 12:14
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: Parrafo de Python con problemas

Por lo poco que pude leer en el tutorial de Psycopg2

Debes de hacer un fetchall
El hecho de que un select arroje una excepción, no indica que no se encontró ningún resultado, indica que no se pudo realizar la acción.

Código Python:
Ver original
  1. import psycopg2
  2. cn = psycopg2.connect("host=localhost dbname=my_db user=postgres password=xxxxxx")
  3. cur = cn.cursor()
  4. relacio = 331232111222022112121122211121121111132213212222123121111111
  5. #
  6. #si no existe se inserta nuevo registro y si existe pasa ya que esta registrado
  7. #
  8. try:
  9.     #seleccionar registro
  10.     cur.execute("SELECT * from tabla_pendientes WHERE sesentapendientes = %s", (relacio,)) #Si falla el query arroja una excepcion
  11.     filas = cur.fetchall() #En este caso, no falla, pero no hay elementos en la lista
  12.     if filas:
  13.         print "Encontrado"
  14.         for fila in filas:
  15.             print fila
  16.     else:
  17.         print "NO encontrado, insertando..."
  18.         cur.execute("INSERT INTO tabla_pendientes (sesentapendientes) VALUES (%s)", (relacio,))
  19.         cn.commit()
  20. except:
  21.     print "Error en un query"

Para el resaltado de sintaxis te recomiendo que leas esto.

Edito: No tengo psycopg2 instalado y tampoco PostgreSQL, así que no pude probar si el script se encuentra bien. Pero debería de funcionar a menos que tenga algún error de dedo.
  #3 (permalink)  
Antiguo 25/12/2010, 02:01
 
Fecha de Ingreso: diciembre-2010
Ubicación: Mallorca
Mensajes: 139
Antigüedad: 13 años, 4 meses
Puntos: 3
Respuesta: Parrafo de Python con problemas

Muchas gracias Razpeitia, finalmente el Select funcionó con un pequeño cambio

donde decía
cur.execute("SELECT * from tabla_pendientes WHERE sesentapendientes = %s", (relacio,))

he tenido que poner...
cur.execute("SELECT * from tabla_pendientes WHERE sesentapendientes = '%s'" % relacio)

lo cierto es que sintácticamente es muy problemático, pero bueno estoy aprendiendo.

a partir de ahora ya usaré los códigos BB.
por cierto, cuando tu contestas se ve muy bonito con las rayas de diferentes colores ¿cómo lo haces?, ¿ es un editor especial?.

Gracias.
  #4 (permalink)  
Antiguo 25/12/2010, 10: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: Parrafo de Python con problemas

No hagas eso, lee la documentación, para saber por que no.

Para el resaltado de código, biene un ComboBox, que dice Highlight.
  #5 (permalink)  
Antiguo 26/12/2010, 05:07
 
Fecha de Ingreso: diciembre-2010
Ubicación: Mallorca
Mensajes: 139
Antigüedad: 13 años, 4 meses
Puntos: 3
Respuesta: Parrafo de Python con problemas

Código HTML:
Ver original
  1. Muchas gracias ota vez.
  2.  
  3. Seguiré tu consejo.
  #6 (permalink)  
Antiguo 26/12/2010, 05:12
 
Fecha de Ingreso: diciembre-2010
Ubicación: Mallorca
Mensajes: 139
Antigüedad: 13 años, 4 meses
Puntos: 3
Respuesta: Parrafo de Python con problemas

Razpeitia, con la sintaxis que me recomendaste da "error en el query", no ejecuta vien el select ni el insert..., con la sintaxis que yo puse funciona vien...
  #7 (permalink)  
Antiguo 26/12/2010, 05:44
 
Fecha de Ingreso: diciembre-2010
Ubicación: Mallorca
Mensajes: 139
Antigüedad: 13 años, 4 meses
Puntos: 3
Respuesta: Parrafo de Python con problemas

Cuando pongo el Select así:

SQL = "SELECT * from tabla_pendientes WHERE sesentapendientes = (%s);"
data = (relacio,)
cur.execute(SQL, data)

me da "error en el Query"

si pongo el Select con las comillas, funciona bien...

SQL = "SELECT * from tabla_pendientes WHERE sesentapendientes = ('%s');"
data = (relacio,)
cur.execute(SQL, data)

He leido en el manual, pero no entiendo por que sucede...

Con el Insert me va perfecto utilizando el formato

SQL = "INSERT INTO tabla_pendientes (sesentapendientes) VALUES (%s);"
data = (relacio,)
cur.execute(SQL, data)

¿cual es la diferencia?,
  #8 (permalink)  
Antiguo 26/12/2010, 10:50
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: Parrafo de Python con problemas

Te recomiendo imprimir el query con mogrify para que veas cual es la diferencia.
  #9 (permalink)  
Antiguo 27/12/2010, 02:49
 
Fecha de Ingreso: diciembre-2010
Ubicación: Mallorca
Mensajes: 139
Antigüedad: 13 años, 4 meses
Puntos: 3
Respuesta: Parrafo de Python con problemas

Código HTML:
Ver original
  1. Buenos dias Razpeitia, cuando dices imprimir el query ¿a que te refieres?.
  2. Estoy trabajando desde Eclipse y con Psycopg2 ¿te refieres tal vez a ejecutarlo desde la line de comandos de Python?
  #10 (permalink)  
Antiguo 27/12/2010, 12:51
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: Parrafo de Python con problemas

Me refiero a esto:
Código Python:
Ver original
  1. SQL = "SELECT * from tabla_pendientes WHERE sesentapendientes = (%s);"
  2. data = (relacio,)
  3. print cur.mogrify(SQL, data)
  4. SQL = "SELECT * from tabla_pendientes WHERE sesentapendientes = ('%s');"
  5. print cur.mogrify(SQL, data)

PD: Usa el resaltado de código solo para código.
  #11 (permalink)  
Antiguo 28/12/2010, 05:06
 
Fecha de Ingreso: diciembre-2010
Ubicación: Mallorca
Mensajes: 139
Antigüedad: 13 años, 4 meses
Puntos: 3
Respuesta: Parrafo de Python con problemas

Muchas gracias, ahora entiendo...

Etiquetas: Ninguno
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 11:02.