Python convirtiendo el resultado de la consulta mysql a json

Estoy tratando de implementar las API REST y parte de ellas es formatear datos en json. Puedo recuperar datos de una base de datos mysql, sin embargo, el objeto que recibo no es lo que esperaba. aqui esta mi codigo

from flask import Flask from flask.ext.mysqldb import MySQL app = Flask(__name__) app.config['MYSQL_HOST'] = '127.0.0.1' app.config['MYSQL_USER'] = 'root' app.config['MYSQL_PASSWORD'] = 'password' app.config['MYSQL_DB'] = 'hello_db' mysql = MySQL(app) @app.route('/hello') def index(): cur = mysql.connection.cursor() cur.execute('''SELECT * FROM Users WHERE id=1''') rv = cur.fetchall() return str(rv) if __name__ == '__main__': app.run(debug=True) 

Salir:

 ((1L, u'my_username', u'my_password'),) 

¿Cómo logro devolver un formato json como este?

 { "id":1, "username":"my_username", "password":"my_password" } 

Puede usar la descripción del cursor para extraer los encabezados de fila como este encabezados de fila = [x [0] para x en cursor.description] `después de la instrucción de ejecución. Luego, puede comprimirlo con el resultado de sql para generar datos json. entonces tu código será

 from flask import Flask from flask.ext.mysqldb import MySQL import json app = Flask(__name__) app.config['MYSQL_HOST'] = '127.0.0.1' app.config['MYSQL_USER'] = 'root' app.config['MYSQL_PASSWORD'] = 'password' app.config['MYSQL_DB'] = 'hello_db' mysql = MySQL(app) @app.route('/hello') def index(): cur = mysql.connection.cursor() cur.execute('''SELECT * FROM Users WHERE id=1''') row_headers=[x[0] for x in cur.description] #this will extract row headers rv = cur.fetchall() json_data=[] for result in rv: json_data.append(dict(zip(row_headers,result))) return json.dumps(json_data) if __name__ == '__main__': app.run(debug=True) 

Desde su salida parece que está recuperando una tupla? En cuyo caso deberías poder simplemente mapearlo.

 from flask import Flask, jsonify from flask.ext.mysqldb import MySQL app = Flask(__name__) app.config['MYSQL_HOST'] = '127.0.0.1' app.config['MYSQL_USER'] = 'root' app.config['MYSQL_PASSWORD'] = 'password' app.config['MYSQL_DB'] = 'hello_db' mysql = MySQL(app) @app.route('/hello') def index(): cur = mysql.connection.cursor() cur.execute('''SELECT * FROM Users WHERE id=1''') rv = cur.fetchall() payload = [] content = {} for result in rv: content = {'id': result[0], 'username': result[1], 'password': result[2]} payload.append(content) content = {} return jsonify(payload) if __name__ == '__main__': app.run(debug=True)