2013-03-05 140 views
1

我在Python获取从我的数据库中的数据集的SQLAlchemy:SQLAlchemy的结果后处理

links = session.query(Link).order_by(Link.id.desc()).limit(20) 

我然后遍历links结果在我看来:

%for link in links: 
    <div class="link"> 
     {{link.url}} 
     %if link.pdf: 
      <a href="{{link.pdf}}">[pdf]</a> 
     %end 
    </div> 
%end 

我想要读取link,pdf中的外部属性(如果PDF文件存在结果)。

我已经试过:

for index, link in enumerate(links): 
    if os.path.isfile('/pdf/'+str(link.id)+'.pdf'): 
     links[index].pdf = '/pdf/'+str(link.id)+'.pdf' 
    else: 
     links[index].pdf = None 

pdf属性显然没有设置。

我在做什么错?在你的模板

linkinfo = [] 
for link in links: 
    pdf = '/pdf/'+str(link.id)+'.pdf' 
    pdf = pdf if os.path.isfile(pdf) else None 
    linkinfo.append({'url': link.url, 'pdf': pdf}) 

然后在linkinfo列表循环,而不是:

回答

1

添加python属性应该可以完成这项工作,例如,

class Link(Base): 
    ... 

    @property 
    def pdf(self): 
     path = '/pdf/%d.pdf' % self.id 
     if os.path.isfile(path): 
      return path 
+0

谢谢,这就是我应该首先做到的 – kevin 2013-03-05 17:27:58

0

一般情况下,我想创建一个映射列表与所需的信息。

这节省了与SQLAlchemy对象的麻烦,并确保您的模板被交给所有正确的数据进行显示。