Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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 如何获取所有mysql元组结果并转换为json_Python_Mysql_Json - Fatal编程技术网

Python 如何获取所有mysql元组结果并转换为json

Python 如何获取所有mysql元组结果并转换为json,python,mysql,json,Python,Mysql,Json,我能够从一个表中得到一个数据。但是当我试图获取表中的所有数据时,我只得到了一行 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]:

我能够从一个表中得到一个数据。但是当我试图获取表中的所有数据时,我只得到了一行

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

return语句位于for循环内,因此在一次迭代后,它将立即返回值
myresult

您不需要指定“硬编码”键值映射,而是使用
zip()
(或)

另外,收集列表中的行,然后将结果转储到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)

希望有帮助。

是的,@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

现在,在PyMysql中,有一个工具可以配置您的连接以使用cursorClass,默认情况下,它会生成字典作为输出。(因此,在API结果转换为JSON时直接返回)

从PyMysql的开始:将您的连接配置为

# 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}

这仍然只返回1行。
#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"}]