2012-05-14 32 views
11

當我想在網頁中顯示的一些數據,數據需要化妝,我不知道如何來實現,這裏是代碼:我可以使用sqlalchemy在RowProxy中分配值嗎?

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」對象不支持項目分配。

我該怎麼做?

表'文章'包含'關鍵字'列,不包含'標籤'列。

+0

以這種方式多元化,這是否意味着每篇文章可以有多個標籤/關鍵字?如何將單個列中的多個關鍵字/標籤存儲在一起?如何查詢具有特定關鍵字的所有文章? – SingleNegationElimination

回答

17

您可以在您的RowProxy中製作一個字典,這將支持項目分配。

例如:

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

它的工作原理,謝謝。 – Tony

+3

只是一個單詞「dict(row)」也會產生相同的結果。 – Jir

1

一個很好的技巧與此是使用字典的一個子類:

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 

這樣做的好處是,你仍然可以訪問值屬性,而且你可以擁有屬性,這是清理和處理來自數據庫的數據的一個很好的方法。

相關問題