comprar dos tablas..

marcelobarbero en arnet.com.ar marcelobarbero en arnet.com.ar
Mie Sep 14 23:13:13 CEST 2005


Tengo entendido que la consulta a una bd te devuelve una tupla, por lo tanto, una tupla es distinta SIEMPRE a una lista.

En cuanto a la forma de asignar los valores de una lista a otra, en vez de hacer:

lista_destino = lista_original

habría que hacer:

lista_destino = lista_original[:]

Esto te da una copia de la lista, en vez de referenciar a la misma lista con dos variables distintas.

Marcelo

Mensaje citado por: Ariel Nardelli <pan_python en yahoo.com.ar>:

> Hola Facu...
>
> Bueno, empiezo a pasar, antes que nada, yo hago asi para procesar las
> cosas (logicamente)...
> Leo el cliente, si existe hago 2 copias del registro en tablas de
> memoria, una (t_tra) es la que uso para modificar, mostrar y todo lo
> demas y la otra (t_ori) queda con el registro original tal cual fue
> leido, la idea de esta ultima tabla es antes de grabar volver a leer el
> cliente y compararla contra mi original para verificar que mientras yo
> estaba modificando alguien en otra terminal ya no lo halla modificado,
> si lo modificaron de otro lado avisar y volver a mostrar los datos, esa
> es basicamente mi logica...
>
> Ok asi declaro las tablas...
>         self.t_tra = [0, \'\', \'\', 0, \'\', \'\', \'\', \'\', 0, \'\', 0, \'\', \'\',
> \'\', 0, 0, 0, \'\']
>         self.t_ori = self.t_tra
> la de trabajo y hago una copia (vacia) en ori...
>
> Asi leo y cargo las tablas...
>         reg = sql03(self.db,\'select * from clientes where cli_nuro =
> %s\',[nume])
>         if reg <> None:
>             self.inivar()
>             for k in range(0,18):
>                 self.t_tra[k] = reg[k]
>                 self.t_ori[k] = reg[k]
>
> donde inivar tiene lo que te puse arriba la declaracion de las tablas :)
> y ahi paso los datos dentro del for, tenia todo en una sola linea pero
> lo separe en 2 justamente para buscar el error...
> un dato importante, si yo hago esto para pasar las tablas (asi)
>
> self.t_tra = self.t_ori = reg
>
> se pasan los datos bien pero cuando quiero modificar el t_tra en
> cualquier lugar me sale este cartel...
> Traceback (most recent call last):
>   File \"clientes/f40100000.py\", line 151, in <lambda>
>     EVT_TEXT_ENTER(self, 3, lambda event: self.evt_enter_text01(event,1,2> ))
>   File \"clientes/f40100000.py\", line 741, in evt_enter_text01
>     self.t_tra[i] = key
> TypeError: object doesn\'t support item assignment
>
> o sea no me deja modificar el valor de t_tra, por eso lo tengo que pasar
> a los datos por for uno por uno, haa el reg viene de una rutina de
> lectura de sql, esa rutina es sencilla tiene esto...
> def sql03(db,sql,k):
>     \"\"\" Leen en mysql y devuelve un registro \"\"\"
>     try:
>         if k == \'NULL\': # Es cuando no viene los datos del sql aparte> .
>             db.execute(sql)
>         else:
>             db.execute(sql,k)
>         resultado = db.fetchone()
>         return resultado
>     except db.MySQLError, e:
>        [bla bla bla[]
>
> Hasta aca como lo asigno, ahora bien, cuando quiero hacer el proceso de
> grabacion antes leo de nuevo el registro para compararlo contra el
> registro ori (el que tenia los datos originales) para detectar que
> alguien no halla modificado esos datos, si son iguales es porque nadie
> en otra terminal lo modifico y procedo a grabar las modificaciones.
> Esto lo hago asi...
>
>             # Primero leemos el registro actual y comparamos para saber
> si alguien lo modifico.
>             reg = sql03(self.db,\'select * from clientes where cli_nuro > =
> %s\',[self.t_tra[0]])
>             if reg == None:
>                 self.cartelitos(\'No encuentro\',\"Sucedio algo Raro, no
> puedo encontrar el registro original, alguien lo habra borrado?.\\n
> Registro no procesado.\")
>                 self.fin_graba()
>                 return
>             # Veo si alguien modifico el registro...
>             ok = 0
>             for k in range(0,18):
>                 if reg[k] <> self.t_ori[k]:
>                     print self.tb_nom[k],\'*\',reg[k],\'*\',self.t_ori[k],\'*\'
>                     ok = 1
>             if ok == 1:
>                 self.cartelitos(\'Registro ya modificado\',\"Alguien ya ha
> modificado este cliente por eso no puedo modificarlo. Intente
> nuevamente.\\n Registro no procesado.\")
>                 self.fin_graba()
>                 return
>
> ahora lo puse con un for a la comparacion y funciona o sea si desde otra
> terminal modifico aca me larga la modificacion, pero si comparo
> directamente las tablas reg <> self.t_ori siempre me dan distinto,
> siempre, mientras que asi no, si modifico algo me da distinto sino no....
>
> Bue, alguna idea facu?
>
>
> Batista, Facundo wrote:
>
> >#- A simple vista no encuentro diferencias, este es un ejemplo...
> >#- (7777L, \'Ariel Nardelli\', \'Amenabar 691\', 3560L, \'03482-428825\',
> >#- \'15-630260\', \'\', \'Nada que ver!!!!\', 99L, \'17684987\', 1L, None, \'N\',
> >#- \'N\', 999L, 9999L, 0L, \'S\')
> >#- [7777L, \'Ariel Nardelli\', \'Amenabar 691\', 3560L, \'03482-428825\',
> >#- \'15-630260\', \'\', \'Nada que ver!!!!\', 99L, \'17684987\', 1L, None, \'N\',
> >#- \'N\', 999L, 9999L, 0L, \'S\']
> >
> >Ariel, pasá un ejemplo que podamos simular. Sino no podemos probar.
> >
> >Pero fijate que el problema no sea que no estás haciendo una copia de > la
> >lista... 
> >
> >Slds.
> >
> >Facundo Batista
> >Desarrollo de Servicios
> >Movistar
> >(54 11) 5130-4643
> >Cel: 15 5161 0678
> >
> >
> >  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > . .
> >. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > . .
> >. . . . . . . . . . . . . . . .
> >ADVERTENCIA.
> >
> >La información contenida en este mensaje y cualquier archivo anexo al > mismo,
> >son para uso exclusivo del destinatario y pueden contener información
> >confidencial o propietaria, cuya divulgación es sancionada por la ley.
> >Si Ud. No es uno de los destinatarios consignados o la persona responsab> le
> >de hacer llegar este mensaje a los destinatarios consignados, no está
> >autorizado a divulgar, copiar, distribuir o retener información (o par> te de
> >ella) contenida en este mensaje. Por favor notifíquenos respondiendo a> l
> >remitente, borre el mensaje original y borre las copias (impresas o grab> adas
> >en cualquier medio magnético) que pueda haber realizado del mismo.
> >Todas las opiniones contenidas en este mail son propias del autor del
> >mensaje y no necesariamente coinciden con las de Telefónica Comunicaci> ones
> >Personales S.A. o alguna empresa asociada.
> >Los mensajes electrónicos pueden ser alterados, motivo por el cual
> >Telefónica Comunicaciones Personales S.A. no aceptará ninguna obliga> ción
> >cualquiera sea el resultante de este mensaje.
> >Muchas Gracias.
> >  
> >
> >------------------------------------------------------------------------
> >
> >_______________________________________________
> >Python-es mailing list
> >Python-es en aditel.org
> >http://listas.aditel.org/listinfo/python-es
> >  
> >
>
>
> -- 
> Saludos
> Panflin
>
> www.reconquista.com.ar
>
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
> 

__________________________________
Registrate desde http://servicios.arnet.com.ar/registracion/registracion.asp?origenid=9 y participá de todos los beneficios del Portal Arnet.
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es