使用python

时间:2018-04-09 17:27:10

标签: python mysql json

如果我只从我的mysql查询中返回一行,我知道标题可以通过python中的dict分配这些值吗?我确实有一些嵌套的数据。数据最终将作为JSON对象返回。

问题:将这些mysql值分配到我的python数组things并将该对象作为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})

1 个答案:

答案 0 :(得分: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': [...