python将mysql查询结果转json

标签 python mysql json

我正在尝试实现 REST API,其中一部分是将数据格式化为 json。我能够从 mysql 数据库中检索数据,但是我收到的对象不是我所期望的。这是我的代码

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)

结果:

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

如何实现返回这样的 json 格式:

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

最佳答案

您可以使用游标描述来提取行标题: row_headers=[x[0] for x in cursor.description] 在执行语句之后。然后就可以用sql的结果zip出来生成json数据了。 所以你的代码将是这样的:

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)

在返回语句中,您可以使用 jsonify 而不是 RickLan 在评论中建议的 json.dumps

关于python将mysql查询结果转json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43796423/

相关文章:

json - Grails 在第二个数据库上运行查询 postgresql 以生成原始 JSON

html - 我需要一个数据库来处理我的网站内容吗?

php - mm表中多重AND的mysql语句

python - 如何在 python 中创建 Json 模式?

python - 如何使用 selenium webdriver Python 单击没有 lisk 的 span 按钮?

python - pymssql执行许多插入值错误

Python:有效地将字节 block 连接成一个大块?

python - 为什么从 Pandas 1.0 中删除了 datetime?

MySQL触发器删除传递的用户ID

php - MySQL查询和子查询