Если я только возвращаю одну строку из моего запроса mysql, и я знаю, что заголовки могут назначать эти значения через dict в python? У меня есть некоторые данные, которые вложены. В конечном итоге данные будут возвращены как объект JSON.
Вопрос: Каков правильный синтаксис для назначения этих значений mysql в мои things
массива python и вернуть этот объект в виде строки json?
Например, моему JSON нужно будет выглядеть примерно так, как вы заметите, что относительные данные в запросе вложены в школу и адрес:
{
"data":[
{
"player":
{
"id":xxx-xxx-xxx,
"name": "name1",
"school":
{
"id":xxxx,
"address":
{
"id":xxx,
"city": "mycity",
"state": "OH"
},
"name": "myschool",
"mascot": "wildcats"
},
"height": 72,
"weight": 180
},
]
}
И я хочу иметь возможность присваивать значения, похожие на:
cur.execute("select pla.id, pla.name, sch.id, address.id, address.city, address.state, sch.name, sch.mascot, pla.height, pla.weight FROM Players pla LEFT JOIN SchoolData sch ON pla.School = sch.ID LEFT JOIN LocationData address ON sch.Location = address.ID where pla.ID = %d" %int(student_id))
things = []
for row in cur.fetchall():
things.append(dict([
{"data":[
{
"player":
{
"id":row[0],
"name": row[1],
"school":
{
"id":row[2],
"address":
{
"id":row[3],
"city": row[4],
"state": row[5]
},
"name": row[6],
"mascot": row[7]
},
"height": row[8],
"weight": row[9]
},
]
}
]))
return (jsonify({'players:' : things})
У опубликованного кода есть некоторые синтаксические ошибки, описанные ниже. Однако, чтобы ответить на ваш вопрос, да. Вы хотите, чтобы DictCursor:
cur = conn.cursor( MySQLdb.cursors.DictCursor )
cur.execute('SELECT id, name FROM Players')
for row in cur.fetchall():
print("{id}: {name}".format( row ))
Между тем, опубликованный код будет работать очень хорошо, если исправлены синтаксические ошибки: в коде отсутствует как закрывающая скобка (}
), так и закрывающая скобка (]
). После этого вам захочется столкнуться с отсутствующей ключевой проблемой с dict()
.
things.append(dict([...
Словарь определяется парами ключ-значение. Код обеспечивает видимое значение, но не ключ. Рассматривать:
things.append(dict(mydata=[...
Или, избегайте дополнительного поиска и вызова функции, используя встроенный язык:
things.append( {'mydata': [...