gpt4 book ai didi

python - 创建 JSON 对象时如何使用列名,Python

转载 作者:搜寻专家 更新时间:2023-10-30 21:44:26 26 4
gpt4 key购买 nike

为了提高代码的可读性,我想在创建 JSON 对象时使用普通单词而不是索引号:

这是我的数据库表 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>

我的 python 代码:

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'

如您所见,我遇到了这个错误:

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

但是这段代码工作正常:

>>> 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"
}
]
>>>

最佳答案

cursor 对象有一个 .description 属性,它告诉你每一列的名称,用它把一行变成一个字典:

cursor.execute("""
SELECT id, name
FROM school_subjects
""")
columns = [desc[0] for desc in cursor.description]
result = []
for row in rows:
row = dict(zip(columns, row))
result.append(row)

有关 .description 属性的详细信息,请参阅 Python DB API 2.0 specification .

关于python - 创建 JSON 对象时如何使用列名,Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12270679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com