[Python] How to use column names when creating JSON object, Python

Discussão em 'Python' iniciado por Stack, Maio 11, 2025.

  1. Stack

    Stack Membro Participativo

    In order to improve readability in my code I want to use plain words instead index numbers, when creating JSON object:

    this is my database table school_subjects:

    mysql> DESCRIBE school_subjects;
    +------------------+--------------+------+-----+---------+----------------+
    | Field | Type | Null | Key | Default | Extra |
    +------------------+--------------+------+-----+---------+----------------+
    | id | int(11) | NO | PRI | NULL | auto_increment |
    | name | varchar(500) | NO | | NULL | |
    | user_id | int(11) | NO | MUL | NULL | |
    | created_by | varchar(64) | NO | | NULL | |
    | created_time | datetime | NO | | NULL | |
    | num_of_followers | int(11) | NO | | NULL | |
    +------------------+--------------+------+-----+---------+----------------+
    6 rows in set (0.00 sec)

    mysql>


    my python code:

    serg@serg-PORTEGE-Z835:~$ python
    Python 2.7.2+ (default, Oct 4 2011, 20:03:08)
    [GCC 4.6.1] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import simplejson as json
    >>> import MySQLdb
    >>> import collections
    >>>
    >>> mydb = MySQLdb.connect(host='localhost', user='root', passwd='', db='schooldb')
    >>> cursor = mydb.cursor()
    >>> cursor.execute("""
    ... SELECT id, name
    ... FROM school_subjects
    ... """)
    6L
    >>> rows = cursor.fetchall()
    >>> result = []
    >>> for row in rows:
    ... d = dict()
    ... d['id'] = row.id #I want something similar to this
    ... d['name'] = row.name #but it doesn't work
    ... result.append(d)
    ...
    Traceback (most recent call last):
    File "<stdin>", line 2, in <module>
    AttributeError: 'tuple' object has no attribute 'id'


    as you can see I'm getting this error:

    Traceback (most recent call last):
    File "<stdin>", line 2, in <module>
    AttributeError: 'tuple' object has no attribute 'id'


    however this code works fine:

    >>> result = []
    >>> for row in rows:
    ... d = dict()
    ... d['id'] = row[0]
    ... d['name'] = row[1]
    ... result.append(d)
    ...
    >>> subjects = json.dumps(result, indent=4)
    >>> print subjects
    [
    {
    "id": 1,
    "name": "Math 140"
    },
    {
    "id": 2,
    "name": "English 102"
    },
    {
    "id": 3,
    "name": "CS 240"
    },
    {
    "id": 4,
    "name": "CS 210"
    },
    {
    "id": 5,
    "name": "Math 140"
    },
    {
    "id": 6,
    "name": "English 102"
    }
    ]
    >>>

    Continue reading...

Compartilhe esta Página