【问题标题】:how to get all mysql tuple result and convert to json如何获取所有mysql元组结果并转换为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

【问题讨论】:

    标签: python mysql json


    【解决方案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"}]
          

          【讨论】:

            猜你喜欢
            • 2017-06-05
            • 1970-01-01
            • 2021-08-29
            • 2015-02-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-03
            相关资源
            最近更新 更多