cambiar el contenido de una variable en SQLAlchemy

Jose Caballero jcaballero.hep en gmail.com
Lun Ago 4 20:53:20 CEST 2008


En efecto, acabo de comprobar que cada entrada que devuelve es un objecto de
la clase RowProxy.
Y la clase RowProxy tiene los siguientes métodos y atributos:

['_RowProxy__parent', '_RowProxy__row', '__class__', '__delattr__',
'__dict__', '__doc__', '__eq__', '__getattr__', '__getattribute__',
'__getitem__', '__hash__', '__init__', '__iter__', '__len__', '__module__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
'__str__', '__weakref__', 'close', 'has_key', 'items', 'keys', 'values']

No se puede acceder a una variable concreta directamente.




El 4 de agosto de 2008 14:44, Jose Caballero<jcaballero.hep en gmail.com>
escribió:

> Muchas gracias de nuevo.
>
> Y si no se entendió bien la pregunta es porque no estaba bien formulada.
> Una pregunta bien formulada siempre se entiende. Es decir, fue culpa mía y
> pido disculpas por ello.
>
> Lo que me propones tiene buena pinta. Y es ese tipo de cosas lo que estoy
> probando.
> De momento lo he arreglado (como solución temporal) haciendo algo como
> esto:
>
>  for entry in lista:
>           entry.new_MyField1 = funcion_cambia_formato(entry.MyField1)
>
> y en el template HTML he cambiado MyField1 por new_MyField1. Funciona, pero
> es horrible.
>
>
> Muchas gracias por tu ayuda, paciencia y tiempo.
>
> Saludos,
> Jose
>
>
>
> El 4 de agosto de 2008 14:35, Alberto Valverde<alberto en toscat.net>
> escribió:
>
> Jose Caballero wrote:
>> >
>> > Si entiendo correctamente lo que leo en ese link, lo que hace insert()
>> es
>> > cambiar el contenido de la base de datos.
>> > ¿Es eso, o no lo he entendido bien?
>> >
>> Sí lo modifica, perdona, he interpretado mal tu pregunta, pensaba que
>> era lo que querías.
>> > Porque no estoy interesado en eso. Sencillamente, quiero cambiar el
>> output
>> > para un campo. Por ejemplo, imaginemos que una de las filas  en la tabla
>> de
>> > mi DB es una fecha, pero yo quiero visualizar en mi web esa fecha con un
>> > formato diferente. O quiero cambiar algunos símbolos raros por espacios
>> en
>> > blanco, y cosas por el estilo.
>> > No quiero cambiar lo que hay en la base de datos. Sólo el contenido que
>> me
>> > devuelve antes de pasarlo al HTML.
>> >
>> Parece que SA no te deja hacer eso con las filas pues... puedes probar a
>> envolverlas:
>>
>> class Envoltorio(object):
>>    def __init__(self, fila):
>>        self.__dict__.update(**dict(fila))
>>
>> filas = map(Envoltorio, filas)
>> for fila filas:
>>    # Ahora sí que puedes modificar los atributos...
>>
>> Aunque yo dejaría que el ORM de SA haga el trabajo sucio que para eso
>> está:
>>
>> en algún sitio, a nivel de módulo:
>>
>> from sqlalchemy.orm import create_session, mapper
>> class UnaClase(object):
>>    @property
>>    def fecha_formateada(self):
>>        return self.fecha.strftime(...)
>>    # etc...
>> mapper(UnaClase, tabla)
>>
>> luego dentro del view:
>>
>> session = create_session()
>> objetos = session.query(UnaClase).all()
>> # la lista "objetos" ya la puedes modificar si quieres y luego mandarla
>> a la plantilla
>>
>> Recuerda *no* llamar nunca a session.flush() o session.commit() sino SA
>> escribirá los cambios en la BDD, a menos que sea lo que quieras, claro
>>
>> Por cierto, he encontrado el tutorial ORM de la 0.3 donde te explica
>> mejor todo ésto:
>> http://www.sqlalchemy.org/docs/03/tutorial.html#tutorial_orm
>>
>> Alberto
>> _______________________________________________
>> Lista de correo Python-es
>> http://listas.aditel.org/listinfo/python-es
>> FAQ: http://listas.aditel.org/faqpyes
>>
>
>
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





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