gpt4 book ai didi

python - 如何使用 python3 将更改模式 json 插入 mysql 中?

转载 作者:行者123 更新时间:2023-11-29 15:32:38 26 4
gpt4 key购买 nike

我一直在使用 python 从 API 中提取数据,我从 api 获取的数据位于嵌套的 json 中,因此当我第一次提取数据时,我会得到类似这样的数据

{
"id":4657,
"type":"Media",
"custom_fields":{
"regarding":"await",
"cf_arc":"nodetails",
"cf_bbv":"nodetails",
"cf_mcp":null,
"cf_tte":"nodetails",
"cf_pod":"nodetails",
"cf_mod":null,
},
"createddate":"2019-10-17T09:59:30Z",
"updateddate":"2019-10-17T09:59:30Z",
}

如果您看到自定义字段是嵌套 json,那么我想将这些嵌套 json 放入每个字段的单列中。所以我压平了 json 并开始插入 mysql DB

def flatten_json(y):
out = {}

def flatten(x, name=''):
if type(x) is dict:
for a in x:
flatten(x[a], name + a + '_')
elif type(x) is list:
# i = 0
# for a in x:
# flatten(a, name + str(i) + '_')
# i += 1
out[name[:-1]] = str(x)
# print(x)
# out[name[:-1]] = x
# if len(x)==0:
# out[name[:-1]] = None
# else:
# out[name[:-1]] = x
else:
out[name[:-1]] = x

flatten(y)
return out

我的问题是 json 模式不断变化,列的顺序以及我得到的 json 类似

"createddate":"2019-10-17T09:59:30Z",
"custom_fields":{
"regarding":"await",
"cf_arc":"nodetails",
"cf_bbv":"nodetails",
"cf_mcp":null,
"cf_tte":"nodetails",
"cf_pod":"nodetails",
"cf_mod":null,
},
"type":"Media",
"updateddate":"2019-10-17T09:59:30Z",
}

列顺序已更改,因此当我压平 json 并尝试插入时会出现错误。

我用谷歌搜索了同样的问题,但找不到任何帮助,我正在使用 python3 和 pymysql 将数据插入 mysql。

任何帮助将不胜感激!

最佳答案

您需要知道有效字段名称的集合,然后使用具有这些名称的列创建表。您可能会发现对数据进行两次传递很方便,也许将其存储在临时文件中。第一遍找到字段名称并创建表,第二遍执行 INSERT。

如果您的表格列按字母顺序排序,您的问题就会变得简单得多。

插入时,只需使用此表达式来构建值列表:

d = flatten_json(y)
vals = [d.get(col)
for col in sorted(table_column_names)]

请注意,如果其中一个 INSERT 缺少某个字段,.get() 将默认为 None。如果我们使用 d[col] 代替,则会引发 fatal error 当一行缺少某个字段时,您可能会觉得更可取。

编辑

要从字符串输入生成 mysql 时间戳,使用str_to_date() .

例如:str_to_date('2019-07-30T15:25:19Z', '%Y-%m-%dT%H:%i:%sZ')

关于python - 如何使用 python3 将更改模式 json 插入 mysql 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58572185/

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