2016-12-15 6 views
0

WTFormsを使用すると、SQLAlchemyユーザーにキーワードを選択させようとしています。その選択肢から、(西、南、東、北)の座標を渡します。その国をプログラムに戻してください。ユーザーの選択に基づいて列から値を取得する

choices=GeoKeywords.labelが国を上手く通過するため、これがどのように行われるかについては固まっています。 「アルバニア」を選択すると値「アルバニア」が渡されます。しかし、その選択に基づいて西、南、東、北をどのように持ち込むことができますか?

データベース表:

enter image description here

GP_DD_GEOKEYWORDS= Table('GP_DD_GEOKEYWORDS', Base.metadata, 
       Column('VALUE', String(75)), 
       Column('LABEL', String(75)), 
        Column('WEST', String(50)), 
        Column('SOUTH', String(50)), 
        Column('NORTH', String(50)), 
        Column('EAST', String(50))) 

class GeoKeywords(): 
s = select([GP_DD_GEOKEYWORDS.c.VALUE, GP_DD_GEOKEYWORDS.c.LABEL]) 
result = connection.execute(s) 
label = [row for row in result] 

class ReusableForm(Form): 
    region = SelectField('Geographic Keyword:', choices=GeoKeywords.label) 

@app.route("/editorother", methods=['GET', 'POST']) 
@login_required 
def editorother(): 
    form = ReusableForm(request.form) 
    if request.method == 'POST': 
     region = request.form['region'] 

     if form.validate(): 
     "Do stuff with region and coordinates" 

答えて

1

選択した地域のためNORTH、EAST、SOUTH、WESTと列を返す別のクエリを作成する必要があります。

... 
if form.validate(): 
    coords_query = select([GP_DD_GEOKEYWORDS.c.NORTH, 
          GP_DD_GEOKEYWORDS.c.EAST, 
          GP_DD_GEOKEYWORDS.c.SOUTH, 
          GP_DD_GEOKEYWORDS.c.WEST]) 
        .where(GP_DD_GEOKEYWORDS.c.LABEL == region) 
    result = connection.execute(coords_query) 
    # result will be a list of matching rows with coordinates arranged in a tuple taking the same order as the 'select' statement 
    # e.g. (NORTH, EAST, SOUTH, WEST) 
... 
+0

私はこれをどのように実装することができますか? – Infinity8

0

@shivの答えは非常に近く、正しい方向に私を得たあなたは.where配置を編集する必要がありますけれども、私は答えとしてそれをマークします。最終的には、これはうまくいった:

class Coodinator: 
    def coordinates_query(self): 
     self.coords_select = select([GP_DD_GEOKEYWORDS.c.WEST, 
           GP_DD_GEOKEYWORDS.c.SOUTH, GP_DD_GEOKEYWORDS.c.EAST, 
           GP_DD_GEOKEYWORDS.c.NORTH]) 

     self.coords_select = self.coords_select.where(GP_DD_GEOKEYWORDS.c.LABEL == region) 
     self.coords_row = connection.execute(self.coords_select) 

       for row in self.coords_row: 
        self.coords_row = dict(row) 

     def coordinates_west(self): 
       return self.coords_row['WEST'] 
関連する問題