2015-02-06 58 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

相關問題