qq_41703291
执检程序猿
2019-04-04 17:04

flask sqlalchemy 如何查询不特定的字段

  • python
  • flask

1、问题
我想在前端传递不特定字段到后端,比如数据库中有user表有一个姓名字段和一个电话字段,我前端做一个选择下拉框,然后将姓名字段名和电话字段名放在下拉框中
下图为前端时间的代码示例

 <select name="select_sjlx" class="form-control" style="float:left;width:120px;margin-right:5px;">
                <option value="none">时间类型</option>
                    {% for k in sj %}
                        <option value={{ sj[k] }}>{{ k }}</option>
                    {% endfor %}
            </select>
            <input  name="entryDatestart" placeholder="起始日期" id="entry-date-start"
                    type="text" style="float:left;width:100px;margin-right:5px;" v-model="lookupType" class="form-control">
            <input  name="entryDatestop" placeholder="终止日期" id="entry-date-stop"
                    type="text" style="float:left;width:100px;margin-right:5px;" v-model="lookupType" class="form-control">

时间类型为选择框,加入有两个变量,我现在通过name属性将时间类型的value值传递到后端。

queryParams: function queryParams(params) {   //设置查询参数
                    var param = {
                    'pageNumber' : params.pageNumber,
                    'pageSize' : params.pageSize,
                    'select_sjlx':$("#select_sjlx").val(),
                    'entryDatestart':$("#entryDatestart").val(),
                    'entryDatestop':$("#entryDatestop").val(),
                    'select_cxkm':$("#select_cxkm").val(),
                    'lookupcontent':$("#lookupcontent").val()
                    //keyword:params.search,
                    };

后端接收数据代码如下:

    pageNumber=request.args.get('pageNumber',default=1, type=int)
    pageSize = request.args.get('pageSize', default=30, type=int)
    select_sjlx = request.args.get('select_sjlx')
    entryDatestart = request.args.get('entryDatestart')
    entryDatestop = request.args.get('entryDatestop')

查询字符串如下:

    if select_cxkm == 'ZF_id':
        rows = current_user.query.filter(User.字段名.ilike('%'+ lookupcontent +'%')).paginate(
            page=pageNumber,
            per_page=pageSize,
            error_out=False
        )

问题是:如何把查询字符串中的字段名更换为接受到的变量,变量名其实也是字段名,但是是字符串的格式。
我尝试用

b = 'id'
a= 'User.query.filter_by('+b+'=1).first()'
a
'User.query.filter_by(id=1).first()'

的方式处理,但是这个查询语句是一个字符串,怎么转换为查询语句

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

3条回答