从其他API URL获取参数,计算并返回FLASK Python中的json

时间:2017-04-12 17:55:10

标签: python json flask

我试图获取一个参数(此处为其客户端ID),然后在sql中使用该参数运行查询,对其进行一些计算,最后在json中返回计算的输出。我正在使用flask库,这是我的代码:

from decimal import *
import pymysql
 import openpyxl
 from flask_restful import Resource, Api, reqparse
 from flask import Flask, jsonify, request



 app = Flask(__name__)

def get():
clientid = request.args.get('clientid')

def doquery(conn):
cur = conn.cursor()
cur.execute("select * from mytable where clientid= %s",get.clientid)
for clientid, other_fields in cur.fetchall():

#performs calculations here
    return(FLA)

    myConnection = pymysql.connect(host=hostname, user=username, passwd=password, db=database)
    doquery(myConnection)
    myConnection.close()

    Dexter = [{'clientid': get.clientid, 'DLA': round(doquery.FLA,2)}]

    @app.route('/upf/clientid=<int:clientid>', methods=['GET'])
    def returnloan(clientid):
          dex = [Dexter for Dexter in Dexter if Dexter['clientid'] == doquery.clientid]         
     return jsonify({'Dexter': dex[0]})

    if __name__ == '__main__':
     app.run(debug=True, port=8080)

当我尝试使用此代码时,会发出错误

属性错误:&#39;功能&#39;对象没有属性&#39; clientid&#39;

任何人都可以告诉我如何定义get函数,这样我就可以解析API url并让clientid被其他函数使用。我在字典里弄错了吗?

1 个答案:

答案 0 :(得分:0)

我可能没有正确理解你的问题,但我认为这正是你要做的。

def doquery(conn, id):
    cur = conn.cursor()
    cur.execute( "select * from mytable where clientid= %s", id )

旁注:问题中的缩进不正确。如果它在您的代码中看起来像那样,而不仅仅是在SO上,那么我强烈建议清理它并统一缩进各种代码块。我还建议将您的功能重命名为更具描述性的内容,例如get_client_id()

我想知道你是否从某个地方借用了一些代码,然后尝试修改它。看起来您将遇到其他一些问题,例如您对doquery的调用,以及函数期望您传递给它的参数。纠正所有这些问题可能超出了单个问题的范围,你可能想回过头来回顾一些Python概念,比如调用函数和传入参数。

  

修改:在回复您的评论时,我认为doquery在调用此doquery.clientid或此doquery.FLA时无法正常工作。您需要访问request get()对象才能正常工作,并且我发现它根据您收到的错误没有该访问权限。

     

我修改了上面的代码以完全删除get(),您可以直接将ID直接传递给doquery,如下所示:doquery(myConnection, clientid)

     

这只适用于您的returnloan路线功能。您接下来遇到的问题是您在该路由功能之外调用doquery,该路由功能没有客户端ID。您必须对代码进行一些认真的重构才能使所有内容正常工作。