gpt4 book ai didi

python - 在python 3中处理mysql结果

转载 作者:行者123 更新时间:2023-12-01 06:37:03 24 4
gpt4 key购买 nike

我是这个论坛的新手,如果问题格式不太好,请原谅。

我正在尝试从 mysql 中的数据库表中获取行,并在处理 cols 后打印相同的行(其中一个 cols 包含需要扩展的 json)。以下是来源和预期输出。如果有人能建议一种更简单的方法来管理这些数据,那就太好了。

注意:我通过大量循环和解析实现了这一目标,但挑战是。
1)col_names和数据之间没有联系,因此当我打印数据时,我不知道结果集中数据的顺序,因此我打印的col标题和数据不匹配,有任何方法可以解决保持同步?
2)我希望能够灵活地更改列的顺序,而无需太多返工。

实现这一目标的最佳方法是什么?没有探索过 pandas 库,因为我不确定它是否真的有必要。

使用Python 3.6

表格中的示例数据

id, student_name, personal_details, university
1, Sam, {"age":"25","DOL":"2015","Address":{"country":"Poland","city":"Warsaw"},"DegreeStatus":"Granted"},UAW
2, Michael, {"age":"24","DOL":"2016","Address":{"country":"Poland","city":"Toruń"},"DegreeStatus":"Granted"},NCU

我正在使用 MySQLdb.connect 对象查询数据库,步骤如下

query = "select * from student_details"
cur.execute(query)
res = cur.fetchall() # get a collection of tuples
db_fields = [z[0] for z in cur.description] # generate list of col_names

变量中的数据:

>>>db_fields
['id', 'student_name', 'personal_details', 'university']
>>>res
((1, 'Sam', '{"age":"25","DOL":"2015","Address":{"country":"Poland","city":"Warsaw"},"DegreeStatus":"Granted"}','UAW'),
(2, 'Michael', '{"age":"24","DOL":"2016","Address":{"country":"Poland","city":"Toruń"},"DegreeStatus":"Granted"}','NCU'))

所需输出:

 id, student_name, age, DOL, country, city, DegreeStatus, University
1, 'Sam', 25, 2015, 'Poland', 'Warsaw', 'Granted', 'UAW'
2, 'Michael', 24, 2016, 'Poland', 'Toruń', 'Granted', 'NCU'

最佳答案

一种不太Pythonic但易于理解的方法(也许你可以编写一个更Pythonic的解决方案)可能是:

def unwrap_dict(_input):
res = dict()
for k, v in _input.items():
# Assuming you know there's only one nested level
if isinstance(v, dict):
for _k, _v in v.items():
res[_k] = _v
continue
res[k] = v
return res


all_data = list()
for row in result:
res = dict()
for field, data in zip(db_fields, row):
# Assuming you know personal_details is the only JSON column
if field == 'personal_details':
data = json.loads(data)
if isinstance(data, dict):
extra = unwrap_dict(data)
res.update(extra)
continue
res[field] = data

all_data.append(res)

关于python - 在python 3中处理mysql结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59615111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com