Python:Flask request.args.get,在表中包含null值

时间:2017-05-03 14:24:05

标签: python mysql flask

我在MySQL中有一个表,我需要从app获取。如果数据不包含'null'值,它可以正常工作,但如果数据包含空值,我无法搜索它。

@app.route('/ABC/search1', methods=['GET'])
def ABCsearch1():
    name = request.args.get('name',default='',type=str)
    priceMin = request.args.get('priceMin',default='',type=str)
    priceMax = request.args.get('priceMax',default='',type=str)

        limit = request.args.get('limit',default=0,type=int)
    offSet = request.args.get('offSet',default=0,type=int)

    query = """ SELECT * FROM KLSE WHERE (Stock LIKE :s0 or Name LIKE :s1 or Number LIKE :s2)
                AND (Price BETWEEN (IF(:s3='_',-5000,:s4)) AND (IF(:s5='_',5000,:s6)))
                LIMIT :s95 OFFSET :s96 """
    query = text(query)
    input = {'s0':name+"%",'s1':name+"%",'s2':name+"%",'s3':priceMin,'s4':priceMin,'s5':priceMax,'s6':priceMax,
                's95':limit,'s96':offSet}
    try:
        call = db.session.execute(query,input)
        f = call.fetchall()
        col = ['index','Stock','Name','Number','Price','id']
        f1 = [OrderedDict(zip(col,t)) for t in f]
    except Exception:
        return 'Error'

    return jsonify({'Stock': f1})

例如,如果股票'XYZ'的价格为3,'XYZZ'的价格为3.4,'XYZA'的价格为数据库中的空。当我在名称中搜索'XY'时,它只会显示'XYZ'和'XYZZ'。 'XYZA'不会显示为null。

我需要与'XY'匹配的任何东西,即使价格为空,我希望它显示出来。

1 个答案:

答案 0 :(得分:0)

NULL not a value它是缺少值,因此您无法对其进行比较。将OR Price is NULL添加到where子句中。如果要提供默认值,可以将IFNULL(Price, '$0.00')添加到选择器字符串。