19

当我想在网页中显示一些数据时,数据需要补,不知道如何实现,代码如下:

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']

它提示:“RowProxy”对象不支持项目分配。

我该怎么做?

表“文章”包含“关键字”列,但不包含“标签”列。

4

2 回答 2

30

您可以从您的 RowProxy 中制作一个 dict,这将支持项目分配。

例如:

result_proxy = query.fetchall()
for row in result_proxy:
    d = dict(row.items())
    d['Tags'] = d['Keywords']
于 2012-05-14T17:47:09.990 回答
5

一个不错的技巧是使用 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

这样做的好处是,您仍然可以将值作为属性访问,而且您可以拥有属性,这是清理和处理来自数据库的数据的好方法。

于 2015-05-05T14:42:25.370 回答