【问题标题】:Assign value from mysql into dict using python使用python将值从mysql分配到dict
【发布时间】:2018-09-19 04:15:13
【问题描述】:

如果我只从我的 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})

【问题讨论】:

  • 好的,那么您的问题/疑问是什么?
  • 抱歉@AlanHoover 不清楚我已根据特定要求更新了我的问题。
  • 如果您尝试运行您发布的内容会发生什么?
  • 我在结束“]”附近收到一个`无效语法`
  • 将您所有的开盘和收盘[]、{} 和() 匹配到该点

标签: python mysql json


【解决方案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': [...

【讨论】:

  • 感谢@hunteke 的推荐。我删除了字典,只是将行中的值分配到我的追加中。我的数据顺序有点不稳定,但那是另一回事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
  • 2017-09-08
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多