Ответ 1
Вы можете сделать dict из своего RowProxy, который будет поддерживать назначение элемента.
Например:
result_proxy = query.fetchall()
for row in result_proxy:
d = dict(row.items())
d['Tags'] = d['Keywords']
Когда я хочу отображать некоторые данные в Интернете, данные нуждаются в макияже, и я не знаю, как это сделать, вот код:
from sqlalchemy import create_engine
engine = create_engine('mysql://root:[email protected]/test?charset=utf8')
conn = engine.connect()
articles = conn.execute('SELECT * FROM article')
articles = articles.fetchall()
for r in articles:
r['Tags'] = r['Keywords']
Он подсказывает, что: объект "RowProxy" не поддерживает назначение элемента.
Что мне делать для этого?
В "статье" таблицы содержится столбец "Ключевые слова" и не содержит столбец "Метки".
Вы можете сделать dict из своего RowProxy, который будет поддерживать назначение элемента.
Например:
result_proxy = query.fetchall()
for row in result_proxy:
d = dict(row.items())
d['Tags'] = d['Keywords']
Один приятный трюк с этим заключается в использовании подкласса 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
Преимущество этого в том, что вы можете получить доступ к значениям по-прежнему как атрибуты, а также иметь свойства, которые являются хорошим способом очистки и обработки данных, поступающих из базы данных.