如何获取所有mysql元组结果并转换为json
Posted
技术标签:
【中文标题】如何获取所有mysql元组结果并转换为json【英文标题】:how to get all mysql tuple result and convert to json 【发布时间】:2014-04-14 11:39:55 【问题描述】:我能够从表中获取单个数据。但是当我试图获取我表上的所有数据时,我只有一行。
cnn.execute(sql)
rows = cnn.fetchall()
column = [t[0] for t in cnn.description]
for row in rows:
myjson = column[0]: row[0], column[1]: row[1], column[2]: row[2], column[3]: row[3], column[4]: row[4], column[5]: row[5], column[6]: row[6], column[7]: row[7], column[8]: row[8], column[9]: row[9], column[10]: row[10], column[11]: row[11], column[12]: row[12], column[13]: row[13], column[14]: row[14], column[15]: row[15], column[16]: row[16], column[17]: row[17], column[18]: row[18], column[19]: row[19], column[20]: row[20]
myresult = json.dumps(myjson, indent=3)
return myresult
【问题讨论】:
【参考方案1】:现在,在 Pymysql 中,有一个工具可以配置您的连接以使用 cursorClass,它默认生成 Dictionary 作为输出。 (因此在返回 API 结果时直接工作,因为它被转换为 JSON)
来自 PyMysql 的documentation:将您的连接配置为
# Connect to the database
connection = pymysql.connect(host='localhost',
user='user',
password='passwd',
db='db',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
result = cursor.fetchone()
print(result)
这个结果的输出:
'password': 'very-secret', 'id': 1
【讨论】:
【参考方案2】:您无需指定“硬编码”键值映射,而是使用zip()
(或itertools.izip())。
另外,收集列表中的行,然后将结果转储到 json:
def dictfetchall(cursor):
"""Returns all rows from a cursor as a list of dicts"""
desc = cursor.description
return [dict(itertools.izip([col[0] for col in desc], row))
for row in cursor.fetchall()]
用法:
results = dictfetchall(cursor)
json_results = json.dumps(results)
希望对您有所帮助。
【讨论】:
【参考方案3】:您的 return 语句位于 for 循环内,因此在单次迭代后它将立即返回 myresult
的值。
【讨论】:
【参考方案4】:是的,@metatoaster 是对的,
试试这个:
cnn.execute(sql)
rows = cnn.fetchall()
column = [t[0] for t in cnn.description]
for row in rows:
myjson = column[0]: row[0], column[1]: row[1], column[2]: row[2], column[3]: row[3], column[4]: row[4], column[5]: row[5], column[6]: row[6], column[7]: row[7], column[8]: row[8], column[9]: row[9], column[10]: row[10], column[11]: row[11], column[12]: row[12], column[13]: row[13], column[14]: row[14], column[15]: row[15], column[16]: row[16], column[17]: row[17], column[18]: row[18], column[19]: row[19], column[20]: row[20]
myresult = json.dumps(myjson, indent=3)
return myresult
【讨论】:
这仍然只返回 1 行。【参考方案5】:#imports
import collections
import MySQLdb
import json
#connect to database
conn = MySQLdb.connect(host= "localhost", user="root", passwd="abc", db="mydatabase")
#Fetch rows
sql = "SELECT * from userstable"
cursor = conn.cursor()
cursor.execute(sql)
data = cursor.fetchall()
#Converting data into json
user_list = []
for row in data :
d = collections.OrderedDict()
d['firstName'] = row[1] #name
d['lastName'] = row[2] #lname
d['email'] = row[3] #email
user_list.append(d)
return json.dumps(user_list)
##Result
["firstName":"jame","lastName":"king","email":"test@gmail.com"]
【讨论】:
以上是关于如何获取所有mysql元组结果并转换为json的主要内容,如果未能解决你的问题,请参考以下文章
请问各位java中如何将数据库返回的多个字段值拼接为一个list并转换为json对象返回到前台,谢谢!