csv特殊数据格式处理,传参列名,条件筛选
我们常见的csv数据都是第一行是列名,之后的每行数据对应列名。
sql常见操作:某列中的值与用户输入值相同,将这条数据取出来。
我偶然得到一个数据如下,第一行是列名,state,和年份,每行数据对是对应年份和州的人口数。
要求操作:用户输入年份,例如查询2011年,California 的人口数。
难点:与上面查询不同的是,列名变成了参数被传入用户传参是动态的,因此不可提前写死数据。
代码实现:
功能:允许用户web输入人口范围和年份,查找符合要求的数据
1 @app.route('/test/', methods=['GET', 'POST']) 2 def test(): 3 min =request.args.get('min') 4 max =request.args.get('max') 5 year6 = request.args.get('year6') 6 #重点是这一句,将列名当作参数传入 7 year7 = '"' + str(year6) + '"' 8 min1=int(min)*100000 9 max1=int(max)*100000 10 11 sql = """ 12 SELECT * 13 FROM TABLE where """+year7+""" between '"""+str(min1)+"""' and '"""+str(max1)+"""' ; 14 """ 15 result = ibm_db.exec_immediate(connect_db, sql) 16 dictionary = ibm_db.fetch_both(result) 17 userlist = [] 18 while dictionary != False: 19 userlist.append(dictionary) 20 dictionary = ibm_db.fetch_both(result) 33 return render_template('index.html', data=userlist)
前端代码展现:
想要展现的数据,可以自己在前端定义
1 <div> 2 3 <form method="GET" action="/test/"> 4 <input type="text" placeholder="min" name="min"> 5 <input type="text" placeholder="max" name="max"> 6 <input type="text" placeholder="year" name="year6"> 7 <button type="submit">search</button> 8 </form> 9 10 </div> 11 12 {% for list in data %} 13 {{ list }} 14 {% endfor %}