2017-04-12 10 views
-1

パラメータ(ここではクライアントID)を取得し、SQLでそのパラメータを使用してクエリを実行しようとしています。 jsonの計算の私はフラスコのライブラリを使用しています、ここに私のコードです:残りのAPI URLからパラメータを取得し、FLASK Pythonでjsonを計算して返します。

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) 

私はそのエラーを与えて、このコードをしようとしている

はAttributeError:「関数」オブジェクトが何の属性「のClientID」

を持っていません誰も私はAPIのURLを解析し、他の関数で使用するclientidを得ることができるように関数を定義する方法を教えてくれますか?辞書で間違いをしていますか?

+1

正確にどのような問題がありますか? – kindall

+0

[ask]と[mcve]を参照してください。 – davidism

+0

'get.clientid'。あなたはこれが何をすると思いますか? 'get'はあなたの関数ですが、もちろん' clientid'という属性はありません。多分あなたは関数内で設定している変数なので、単に 'clientid'を意味していたでしょうか? – davidism

答えて

0

私はあなたの質問を正しく理解していないかもしれませんが、これはあなたがやろうとしていることだと思います。

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

注:質問の字下げは正しくありません。それがあなたのコードのように見えるだけでなく、ここだけでなく、あなたの様々なコードブロックを一様にインデントすることを強く推奨します。 get_client_id()のように、わかりやすい名前に関数の名前を変更することをお勧めします。

私はこのコードの一部をどこかから借りてきたのだろうかと思っていて、それを修正しようとしました。 doqueryへの呼び出しや、関数が渡すことを期待している引数など、いくつかの問題があるようです。これらのさまざまな問題をすべて修正することはおそらくここでの1つの質問の範囲を超えています。関数の呼び出しや引数の受け渡しなど、Pythonの概念のいくつかを復習して見直したいと思うかもしれません。

Edit: In response to your comment, I don't think doquery is going to work properly when it's called like this doquery.clientid or this doquery.FLA . You need access to the request object for get() to work properly, and I see that it doesn't have that access based on the error you received.

I modified the code above to remove get() entirely, and you can instead just pass the id directly to doquery like so: doquery(myConnection, clientid) .

This will only work inside your returnloan route function. The problem you've then got on your hands is you are making calls to doquery outside that route function, which do not have the client id. You'll have to do some serious restructuring of your code to get everything working properly together.

+0

doqueryは正常に動作しており、計算後にすべての値を返します。私はクライアントIDをget()に置き換えました。今私は次のエラーが表示されます: RuntimeError:要求コンテキストの外で働いています。 これは通常、アクティブなHTTP要求である が必要な機能を使用しようとしたことを意味します。この問題を回避する方法については、 のテストに関するドキュメントを参照してください。 –

関連する問題