根据用户选择从列中获取值
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']
使用 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']