Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python的RESTAPI键和值_Python_Mysql_Json_Rest_Api - Fatal编程技术网

Python的RESTAPI键和值

Python的RESTAPI键和值,python,mysql,json,rest,api,Python,Mysql,Json,Rest,Api,我知道有几种方法可以在Python上为REST API消费目的公开数据。然而,我使用的两种方法似乎在为结果值生成键方面存在问题。以下是我用来构建REST API的两种方法: 第一种方法 from flask import Flask, jsonify from flaskext.mysql import MySQL mysql = MySQL() app = Flask(__name__) app.config['MYSQL_DATABASE_HOST'] = 'localhost' app

我知道有几种方法可以在Python上为REST API消费目的公开数据。然而,我使用的两种方法似乎在为结果值生成键方面存在问题。以下是我用来构建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)
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)
第二种方法

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)
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)
下面是一个缺少键名(列名)的请求结果示例


如何在不键入数据库中找到的每一列标题的情况下获取键名?提前感谢您的回复。

使用DictCursor(
MySQLdb.cursors.DictCursor

好的。现在我明白了。谢谢我只需要在查询行中添加dict。让我们设置第二个方法,例如:
res=[dict((conn.description[i][0],value)for i,value in enumerate(row))for conn.fetchall()中的row]