2015-02-06 37 views
1

我是一个尝试使用Pyramid和SQLAlchemy执行简单Web应用程序的初学者。截至目前,我的应用程序只是返回存储在我的表中的所有数据。从SQLAlchemy中的表中选择数据抛出错误

我views.py:

@view_config(route_name='home', renderer='templates/trial.pt') 
def my_view(request): 
    try: 
     #str=Mystring(name="second",data="Hellostring") 
     #DBSession.add(str) 
     myvar=Mystring.query.order_by(Mystrings.data) 

    except DBAPIError: 
     return Response(conn_err_msg, content_type='text/plain', status_int=500) 
    #return {'project': 'Alpy'} 
    return {'myvar':myvar} 

我的模板: -

<body> 
    <div id="middle"> 
     <div class="middle align-right"> 
     <div id="left" class="app-welcome align-left"> 
      You can return to the 
      <a href="${request.application_url}">FrontPage</a>.<br/> 
<div tal:condition="myvar"> 
Your selection returns:<br><tal:block tal:content="myvar"></tal:block> 
     </div> 
    </div> 
    </div> 
</body> 

我model.py:-

class Mystring(Base): 
    __tablename__ = 'mystrings' 
    id = Column(Integer, primary_key=True) 
    name = Column(Text) 
    data = Column(Text) 

我的错误是:AttributeError: type object 'Mystring' has no attribute 'query'

我试过这个。 “MYVAR = DBSession.query(MyString的)。所有()”的错误走了,但我得到

Your selection returns: 
[alpy.models.Mystring object at xxxx, alpy.models.Mystring object at xxxxx] 

这是不是我的意图得到。我想要一个名称值对。

请帮忙。

+0

我已经编辑我的问题,请检查。 – Tania 2015-02-06 10:06:11

+0

好的改变,我打算建议它(你在会话实例上运行查询方法)。你得到一个对象列表,因为你没有请求你想要的对象的哪个字段。你可以这样写: [x在myvar中的x.name],你得到一个名字列表。与数据字段类似。 你也可以使用正常for循环,但使用列表理解是一个伟大的Python成语。 – 2015-02-06 10:24:53

+0

谢谢。但是,我如何将它们全部发送给响应字典?我是否应该用类名Mystring替换x? – Tania 2015-02-06 10:29:03

回答

2

您正在从sqlalchemy获取对象列表。如果你只是需要的数据,并要返回的(名字,数据)对的列表,你可以用一个列表理解这样做: return [(x.name, x.data) for x in myvar]

注:x仅仅是列表中的局部变量理解,所以它可以是你喜欢的任何名字。

有一个在官方网站SQLAlchemy的基础知识一些伟大的文档,在这里:http://docs.sqlalchemy.org/en/rel_0_9/orm/tutorial.html

相关问题