2017-12-12 2 views
1

PythonでREST APIを使用する目的でデータを公開するには、いくつかの方法があることを認識しています。しかし、私が使用した2つのメソッドは、結果の値のキーを生成することに問題があるようでした。PythonのREST APIのキーと値

まずメソッド

from flask import Flask, jsonify 
from flaskext.mysql import MySQL 

mysql = MySQL() 
app = Flask(__name__) 

app.config['MYSQL_DATABASE_HOST'] = 'localhost' 
app.config['MYSQL_DATABASE_USER'] = 'user' 
app.config['MYSQL_DATABASE_PASSWORD'] = 'fakepassword' 
app.config['MYSQL_DATABASE_DB'] = 'router' 

mysql.init_app(app) 

@app.route('/api/v1/routerstatus', methods=['GET']) 
def get(): 
     cursor = mysql.connect().cursor() 
     cursor.execute('SELECT * FROM dm_routerstatus ORDER BY 
status_update_time DESC LIMIT 100;') 
     rv = cursor.fetchall() 
     return jsonify(rv) 

if __name__ == '__main__': 
     app.run(host='0.0.0.0') 
     app.run(debug=True) 

第2の方法

from flask import Flask, jsonify, request 
from flask_restful import Resource, Api 
from json import dumps 
from flaskext.mysql import MySQL 

*SKIPPED THE DB CREDENTIALS* 

mysql = MySQL() 
app = Flask(__name__) 
api = Api(app) 

mysql.init_app(app) 

class Router(Resource): 
    def get(self): 
     conn = mysql.connect().cursor() 
     query = cursor.execute('SELECT * FROM dm_routerstatus ORDER BY 
     status_update_time DESC LIMIT 100;') 
     result = {'data': [i[0] for i in query.cursor.fetchall()]} 
     return jsonify(result) 

api.add_resource(Router, '/api/v1/routerstatus') 

if __name__ == '__main__': 
     app.run(host='0.0.0.0', port=5000) 
     app.run(debug=True) 

以下のリクエスト結果の一例である:ここで私は私のREST APIを構築するために使用される二つの方法がありますキー名(列名)がありません。私は、データベース内で見つかったすべての単一の列のタイトルを入力せずにキー名を取得するにはどうすればよい

How do I get the key names without typing every single column titles found in the database?

?回答には事前に感謝します。

答えて

1

DictCursor(MySQLdb.cursors.DictCursor

+0

Alrightを使用してください。今分かります。ありがとう。クエリ行にdictを追加するだけです。 2番目のメソッドを設定しましょう: conn.fetchall()]の行の 'res = [dict((iの場合はi.description [i] [0]、value)、enumerate(rowの場合) –