外部Webアプリケーションからいくつかのパラメータを要求します。私はフラスコとクエリのデータをMySQLから作成してAPIを作成します。 0 を使用しているときにに修正入力を入力した場合しかしを照会できません。 request.args['name']
とrequest.args.get('name')
の両方を試してみましたが、例外パスの出力を返します。Flask Python:request.argsを使用してパラメータを取得できません
以下は私の現在のコードです。私が使用した修正入力をコメントアウトします。
from flask import Flask,jsonify,abort,make_response,request,render_template
import MySQLdb
import MySQLdb.cursors
@app.route('/KLSE/search', methods=['GET'])
def KLSEsearch():
db = MySQLdb.connect(host='vinus.mysql.pythonanywhere-services.com',user='vinus',passwd='Vindex2016',db='vinus$default',cursorclass=MySQLdb.cursors.DictCursor)
curs = db.cursor()
#name ='P'
#macd = 'H'
#volumeMin = '_'
#volumeMax = '_'
#stoch ='H1'
#bollinger ='H'
#rsi ='H1'
#atr ='LV'
#trade = 'HOLD'
#limit = 3
#offSet = 1
name = request.args.get('name')
volumeMin = request.args['volumeMin']
volumeMax = request.args['volumeMax']
macd = request.args['macd']
stoch = request.args['stoch']
bollinger = request.args['bollinger']
rsi = request.args['rsi']
atr = request.args['atr']
trade = request.args['trade']
limit = request.args['limit']
offSet = request.args['offSet']
query0 = "SELECT * FROM KLSE WHERE Stock LIKE '%s' AND"
#query1 = "(Vindex BETWEEN (IF(%s='_',-5000,%s)) AND (IF(%s='_',5000,%s))) AND "
query2 = "(Volume_changes_pc BETWEEN (IF (%s='_',-5000,%s)) AND (IF(%s='_',5000,%s))) AND "
query3 = "MACD LIKE %s AND "
query4 = "STOCH LIKE %s AND "
query5 = "BOLLINGER LIKE %s AND "
query6 = "RSI LIKE %s AND "
query7 = "ATR LIKE %s AND "
query8 = "TRADE LIKE %s LIMIT %s OFFSET %s"
query = query0+query2+query3+query4+query5+query6+query7+query8
input = name+"%",volumeMin,volumeMin,volumeMax,volumeMax,macd,stoch,bollinger,rsi,atr,trade,limit,offSet
try:
curs.execute(query,(input))
g = curs.fetchall()
except Exception:
return 'Error: unable to fetch items'
#return "hihi"
return jsonify({'Stock': g})
次のような出力値があります。 MySQLへのクエリが正しいことを示していると思います。引数を使用して、ユーザーの入力値については、 http://vinus.pythonanywhere.com/KLSE/search1
正しい方法は何ですか、パラメータを取得? volumeMin、volumeMax、limitおよびoffSetは、浮動小数点数と整数です。
'request.args.get( '値'、デフォルト= 0、タイプ= INT)' request.argsとして[ここでGETメソッドにドキュメントを参照してくださいImmutableMultiDictれる(http://werkzeug.pocoo.org /docs/0.11/datastructures/#werkzeug.datastructures.TypeConversionDict.get) – abigperson
@PJSantoro、 'request.args.get( 'name'、default = 0、type = str)'、 'request.args.get( 'valueMin '、default = 0、type = float) 'と' request.args.get(' limit '、default = 0、type = int) '、それは正しいですか? – vindex
はい、いいですね!おそらく 'request.args.get( 'name'、default = ''、type = str)'を除いて ' – abigperson