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

Vin*_*ent 4 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]: 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
Run Code Online (Sandbox Code Playgroud)

sum*_*mdi 11

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

从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)
Run Code Online (Sandbox Code Playgroud)

此结果的输出:

{'password': 'very-secret', 'id': 1}
Run Code Online (Sandbox Code Playgroud)


ale*_*cxe 5

您不需要指定“硬编码”键值映射,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()]
Run Code Online (Sandbox Code Playgroud)

用法:

results = dictfetchall(cursor)
json_results = json.dumps(results)
Run Code Online (Sandbox Code Playgroud)

希望有帮助。