如何在创建JSON对象Python时使用列名
为了提高代码的可读性,在创建JSON对象时,我希望使用普通字而不是索引号: 这是我的数据库表school_主题:如何在创建JSON对象Python时使用列名,python,mysql,database,json,Python,Mysql,Database,Json,为了提高代码的可读性,在创建JSON对象时,我希望使用普通字而不是索引号: 这是我的数据库表school_主题: mysql> DESCRIBE school_subjects; +------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----
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'
游标对象有一个.description属性,告诉您每列的名称,使用该属性将行转换为dict:
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属性的详细信息,请参见。游标对象有一个.description属性,用于告诉您每列的名称,使用该属性可将行转换为dict:
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属性的详细信息,请参阅。出于某种奇怪的原因,我在Zipt结尾处出现了“无效语法”错误,这是因为行中存在实际错误,并且过于冗长。我用一个直接dict调用更新了它。出于某种奇怪的原因,我在Zipt的末尾出现了“无效语法”错误,这是因为行中有一个实际的错误,而且过于冗长。我用一个直接的dict调用更新了它。你有什么理由不应该使用dict游标吗?只需将游标调用更改为cursor=mydb.cursorMySQLdb.cursors.DictCursor。有什么原因不应该使用DictCursor吗?只需将游标调用更改为cursor=mydb.cursorMySQLdb.cursors.DictCursor。
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)
from django.db import connection
cursor = connection.cursor()
cursor.execute("SELECT * FROM blog_contact")
rows = cursor.fetchall()
columns = [desc[0] for desc in cursor.description]
result = []
for row in rows:
row = dict(zip(columns, row))
result.append(row)
row = {"columns": columns,"rows":rows,"results":result}
return render(request, 'blog/contact.html', row)