2017-08-31 38 views
-1

我想顯示我的數據庫的查詢結果,但它讓我感到困惑 - 它不像我所期望的那樣行事,每次都不顯示任何內容。我的模型:使用SQLAlchemy正確查詢數據庫關係

class Ball(Base): 
__tablename__ = 'balls' 
id = Column(Integer, primary_key=True) 
ball_id = Column(Integer, ForeignKey('fields.id')) 
ball = relationship("Field", back_populates="fields") 


class Field(Base): 
    __tablename__ = 'fields' 
    id = Column(Integer, primary_key=True) 
    nickname = Column(String) 
    places = relationship("Ball", order_by=Ball.id, back_populates="fields") 

我的代碼在瓶:

@app.route("/addball", methods=['GET', 'POST']) 
def addball(): 
    records = dict() 
    with create_session() as session: 
     for field in session.query(Field).order_by(Field.nickname.asc()).all(): 
      record = (session.query(Field). 
         join(Ball). 
         filter(Ball.field_id == field.id)) 
      if record: 
       records[field.id] = record 
    return render_template("addball.html", form=form, records=records) 

和神社模板:

{% for key, field in records.items() %} 
    {% for elem in field %} 
     {{ elem }} 
    {% endfor %} 
{% endfor %} 

我要完成什麼:我希望能夠顯示idball_id和也爲每個領域的nickname。我最好的拍攝至今在金賈模板,顯示查詢,像這樣:

SELECT fields.id AS fields_id, fields.nickname AS fields_nickname FROM fields JOIN balls ON balls.id = balls.ball_id WHERE balls.ball_id = ? 
+0

如果打印查詢只是一個故障排除步驟,您可能需要重命名您的問題,以便解決查詢數據庫的實際問題。 – robmathers

回答

0

你讓你的查詢過於複雜。您已經提供了SQLAlchemy關係信息,因此不用擔心嘗試使用聯接創建查詢。

要獲得字段列表,並顯示相關數據的球,我會做的東西沿着這些路線(道歉,如果這不完全符合您的架構,但它應該是接近):

在你瓶路線:

records = session.query(Field.order_by(Field.nickname.asc()).all() 
return render_template("addball.html", form=form, records=records) 

在模板:

{% for field in records %} 
<p> 
    Field ID: {{ field.id }} 
    Ball ID: {{ field.ball.id }} 
    Nickname: {{ field.nickname }} 
</p> 
{% endfor %} 

的ORM的整點是,你回來的對象與將相關表之間的連接,因此T特性您可以像訪問代碼中的任何其他對象和變量一樣訪問數據,如field.ball,並且不必太多地混淆連接或其他複雜查詢。

+0

打印「{{field}}」時,我無法訪問「Ball」字段,輸出爲「' ',所以沒有''球''領域。 session.query(Field,Ball).filter(Field.id == Ball.id).order_by(Field.nickname.asc())。all()''得到了''(<字段(id ='1',name ='stadium')>,)',但它完全忽略了ORM的要點。 – PotatoBox

+0

這是因爲'{{field}}'輸出對象的字符串表示形式。當你的模板使用'{{field.id}}'時會發生什麼? – robmathers

+0

它正確呈現'Field'模型字段,並且可以方便地訪問這些值(就像你寫的那樣),但是現在我認爲這是一個關係問題 - 就在我想我已經計算出來並改變了''back_populates ='字段時在''Ball''模型中,''''爲''back_populates =「balls」'',錯誤 ''Mapper'Mapper | Field | fields'沒有屬性'balls'''出現。 – PotatoBox