根据用户选择从列中获取值

Getting values from columns based on user selection

使用 WTForms,SQLAlchemy 我试图让用户 select 从下拉列表中输入 Country 关键字,然后从该选项中我们传递坐标(西、南, 东, 北)那个国家回到计划。

随着 choices=GeoKeywords.label 顺利通过国家/地区,一直在思考如何做到这一点。选择 "Albania" 传递值 "Albania"。但是我怎样才能根据 selection 引入西、南、东、北?

数据库Table:

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"

您需要创建另一个查询,其中 returns 所选区域的 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)
...

@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']