【问题标题】:Getting values from columns based on user selection根据用户选择从列中获取值
【发布时间】:2017-05-01 15:15:31
【问题描述】:

使用 WTForms、SQLAlchemy 我试图让用户从下拉列表中选择一个 Country 关键字,然后从该选择中我们将那个国家的坐标(西、南、东、北)传回到程序。

choices=GeoKeywords.label 顺利通过该国时,一直坚持如何做到这一点。选择“Albania”将传递值“Albania”。但是如何根据该选择引入西、南、东、北?

数据库表:

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"

【问题讨论】:

    标签: python python-2.7 flask sqlalchemy flask-wtforms


    【解决方案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)
    ...
    

    【讨论】:

    • 我得到一个未解决的引用 .where 我该如何实现这个?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 2022-11-24
      • 2017-10-21
      相关资源
      最近更新 更多