¿Puedo asignar valores en RowProxy usando sqlalchemy?

Cuando quiero mostrar algunos datos en la web, los datos necesitan una composición, y no sé cómo lograrlos, aquí está el código:

from sqlalchemy import create_engine engine = create_engine('mysql://root:111@localhost/test?charset=utf8') conn = engine.connect() articles = conn.execute('SELECT * FROM article') articles = articles.fetchall() for r in articles: r['Tags'] = r['Keywords'] 

Se sugiere que: el objeto ‘RowProxy’ no admite la asignación de elementos.

¿Qué debo hacer para eso?

La tabla ‘artículo’ contiene la columna ‘Palabras clave’, y no contiene la columna ‘Etiquetas’.

Puede hacer un dictado de su RowProxy, que sería compatible con la asignación de elementos.

Por ejemplo:

 result_proxy = query.fetchall() for row in result_proxy: d = dict(row.items()) d['Tags'] = d['Keywords'] 

Un buen truco con esto es usar una subclase de un dict:

 class DBRow(dict): def __getattr__(self, key): """make values available as attributes""" try: return self[key] except KeyError as error: raise AttributeError(str(error)) @property def something_calculated(self): return self.a + self.b row = DBRow(result_proxy_row, additional_value=123) row["b"] = 2 * row.b print something_calculated 

El beneficio de esto es que puede acceder a los valores aún como atributos, además de que puede tener propiedades, lo cual es una buena manera de limpiar y masajear los datos provenientes de la base de datos.