Присвойте значение из mysql в dict, используя python

0

Если я только возвращаю одну строку из моего запроса 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})
  • 0
    Хорошо, так в чем ваша проблема / вопрос?
  • 0
    Извините @AlanHoover за непонятность. Я обновил свои вопросы по конкретному запросу.
Показать ещё 3 комментария
Теги:

1 ответ

1
Лучший ответ

У опубликованного кода есть некоторые синтаксические ошибки, описанные ниже. Однако, чтобы ответить на ваш вопрос, да. Вы хотите, чтобы 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': [...
  • 0
    Спасибо @hunteke за рекомендацию. Я удалил dict и просто присвоил значения из строки в моем приложении. Порядок моих данных немного странный, но это другая история.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню