如何用SQLAlchemy从empmaster表获取两列数据用于表单下拉框?
解决方案
要仅获取Employee_Number和Employee_Name两列数据,你可以通过SQLAlchemy的with_entities()方法精准指定查询字段,替代原来返回全表数据的query.all()。
方法1:用with_entities()查询指定列
修改app.py中的查询代码:
@app.route('/component/add', methods=['GET', 'POST']) def componentadd(): error_msg = '' success_msg = '' if request.method == 'GET': # 仅查询需要的两列 empmaster_data = empmasterModel.query.with_entities( empmasterModel.Employee_Number, empmasterModel.Employee_Name ).all() print(empmaster_data , "dbbbbbbbbbbbbb") return render_template('component/add.html', empmaster_data=empmaster_data)
此时empmaster_data是元组列表,每个元素格式为(Employee_Number值, Employee_Name值)。
模板中渲染下拉框
在add.html里生成下拉选项:
<select name="employee_select"> {% for emp_num, emp_name in empmaster_data %} <option value="{{ emp_num }}">{{ emp_name }}</option> {% endfor %} </select>
方法2:用values()获取字典格式结果
如果希望返回更直观的字典形式数据,可使用values()方法:
empmaster_data = empmasterModel.query.values('Employee_Number', 'Employee_Name')
模板中通过属性访问字段:
<select name="employee_select"> {% for emp in empmaster_data %} <option value="{{ emp.Employee_Number }}">{{ emp.Employee_Name }}</option> {% endfor %} </select>
额外注意点
你的empmasterModel中同时将Empnum和Employee_Number设为primary_key=True,这会创建复合主键。如果Employee_Number已经是唯一值,建议只保留一个主键(比如去掉Empnum的primary_key=True),避免后续操作出现异常。
内容的提问来源于stack exchange,提问作者merry_kulal
相关产品推荐
相关产品推荐

