执检程序猿
2019-04-04 17:04
采纳率: 50%
浏览 2.2k
已采纳

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

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条回答 默认 最新

  • 执检程序猿 2019-04-06 22:39
    已采纳

    已经找到大神老师解决了,唉,这个搞了我四天,但是真的很简单。直接转换字符串语句执行就行了。
    参考字符串处理函数中的一种

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • laserterry 2019-07-22 11:14

    id是个变量
    User.query.filter_by(__dict__[id]=1).first()

    评论
    解决 3 无用
    打赏 举报
  • 执检程序猿 2020-11-06 09:17

    这个__dict__是查询变量的很好的办法,但是,我在用这个赋值的时候出现了很奇怪的问题,那就是可以赋值,赋值后也能直接用对应的列名显示出来,但是就是提交不成功,特别奇葩的问题。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题