繁体   English   中英

从SQL数据库游标构建JSON数据

[英]building json data from sql database cursor

不知道json的结构,如何从数据库查询返回json对象? 所有信息都在那里,我只是不知道如何构建对象。

import MySQLdb
import json
db = MySQLdb.connect( host, user, password, db)
cursor = db.cursor()
cursor.execute( query )
rows = cursor.fetchall()

field_names = [i[0] for i in cursor.description]
json_string = json.dumps( dict(rows) )

print field_names[0]
print field_names[1]
print json_string

db.close()

计数

严重程度

{“ 321”:“ 7.2”,“ 1”:“ 5.0”,“ 5”:“ 4.3”,“ 7”:“ 6.8”,“ 1447”:“ 9.3”,“ 176”:“ 10.0”}

json对象如下所示:

{"data":[{"count":"321","severity":"7.2"},{"count":"1","severity":"5.0"},{"count":"5","severity":"4.3"},{"count":"7","severity":"6.8"},{"count":"1447","severity":"9.3"},{"count":"176","severity":"10.0"}]}

1-您可以使用pymsql DictCursor

import pymysql
connection = pymysql.connect(db="test")
cursor = connection.cursor(pymysql.cursors.DictCursor)
cursor.execute("SELECT ...")
row = cursor.fetchone()
print row["key"]

2- MySQLdb还包括您可以使用的DictCursor 建立连接时,您需要传递cursorclass=MySQLdb.cursors.DictCursor

import MySQLdb
import MySQLdb.cursors
connection = MySQLdb.connect(db="test",cursorclass=MySQLdb.cursors.DictCursor)
cursor = connection.cursor()
cursor.execute("SELECT ...")
row = cursor.fetchone()
print row["key"]

您遇到的问题之所以发生,是因为您仅将获取的项目变成字典,而没有它们的描述。

python中的dict期望另一个dict,或者返回一个可迭代的返回两个元素的元组,其中对于每个元组,第一个项目将是键,第二个将是值。

由于您仅获取两列,因此对于每个获取的行,您都将第一列(计数)作为键,将第二列(严重性)作为值。

您还想将描述结合在一起,如下所示:

json_string = json.dumps([
{description: value for description, value in zip(field_names, row)}
for row in rows])

尽管代码令人困惑,但我可以使用Collections库来工作:

import MySQLdb
import json
import collections
db = MySQLdb.connect(host, user, passwd, db)
cursor = db.cursor()
cursor.execute( query )
rows = cursor.fetchall()
field_names = [i[0] for i in cursor.description]

objects_list = []
for row in rows:
    d = collections.OrderedDict()
    d[ field_names[0] ] = row[0]
    d[ field_names[1] ] = row[1]
    objects_list.append(d)

json_string = json.dumps( objects_list )

print json_string

db.close()

[{“ count”:176,“ severity”:“ 10.0”},{“ count”:1447,“ severity”:“ 9.3”},{“ count”:321,“ severity”:“ 7.2”},{ “ count”:7,“ severity”:“ 6.8”},{“ count”:1,“ severity”:“ 5.8”},{“ count”:1,“ severity”:“ 5.0”},{“ count “:5,”严重性“:” 4.3“}]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM